1

まず、背景を少し。uWSGI で皇帝モードでアプリを実行しています。uWSGI コマンドライン:

uwsgi --master --emperor /etc/uwsgi --die-on-term --uid uwsgi --gid uwsgi

アプリの INI ファイルは /etc/uwsgi にあり、uWSGI の起動時に正常に検出されます。私のアプリの uwsgi および logging 構成セクション:

[uwsgi]
socket = /tmp/uwsgi.sock
master = true
processes = 8
threads = 4
harakiri = 60
harakiri-verbose = true
limit-post = 52428800
post-buffering = 8192
listen = 256
max-requests = 1000
buffer-size = 32768
no-orphans = true
logto = /var/log/uwsgi/my_app.log
log-slow = 1000
virtualenv = /usr/local/python/my_app
paste = config:%p

[loggers]
keys = root, my_app

[handlers]
keys = console

[formatters]
keys = generic

[logger_root]
level = WARN
handlers = console

[logger_my_app]
level = DEBUG
handlers =
qualname = my_app

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s

Nginx はサイトをプロキシするように構成されており、正常に実行されます。アプリが起動し、正常に動作します。Webブラウザから問題なくアクセスできます。次のようにアプリから何かをログに記録しようとすると、問題が発生します。

import logging
log = logging.getLogger(__name__)
log.info('hello world')

私のログでは、「hello world」の代わりに次のように表示されます。

ロガー「my_app.my_module」のハンドラーが見つかりませんでした

uWSGI が INI ファイルからログ設定を取得していないようです。uWSGIコマンドラインで「--ini-paste-logged my.ini」オプションを使用することを提案する人を見てきましたが、皇帝モードを使用しているため、これは私の場合は機能しません。

他の人は、アプリ内から pyramid.paster.setup_logging を呼び出すことを提案していますが、これは理想的な解決策ではないようです。まず、開発中に、setup_logging を自動的に呼び出す pserve を使用してアプリをローカルで実行するため、アプリが実行されている環境に応じて条件付きで呼び出す必要があります。次に、setup_logging には構成ファイルへのパスが引数として必要です。ステージング環境と本番環境で異なる構成を使用できるようにする必要があるため、構成ファイルにパスを指定する設定を追加するなどの操作を行う必要があるようです。せいぜい複雑なソリューションです。

一連のフープをジャンプせずに、uWSGI にロギング構成を取得させる方法はありますか?

4

1 に答える 1

7

エンペラーモードに関するウェブ上には貴重なコンテンツがほとんどないように見えるので、それを理解して、後世のためにここに残しておくこともできます. INI ファイルの uwsgi セクションに「paste-logger = %p」を追加したところ、ログが機能するようになりました。コンテキストの完全な uwsgi セクション:

[uwsgi]
socket = /tmp/uwsgi.sock
master = true
processes = 8
threads = 4
harakiri = 60
harakiri-verbose = true
limit-post = 52428800
post-buffering = 8192
listen = 256
max-requests = 1000
buffer-size = 32768
no-orphans = true
logto = /var/log/uwsgi/my_app.log
log-slow = 1000
virtualenv = /usr/local/python/my_app
paste = config:%p
paste-logger = %p
于 2013-06-18T04:42:14.777 に答える