簡體   English   中英

在皇帝模式下在uWSGI下運行金字塔應用程序時無法記錄日志

[英]Logging not working when running pyramid app under uWSGI in emperor mode

首先,有一點背景。 我在uWSGI下以皇帝模式運行一個應用程序。 uWSGI命令行:

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

我的應用程序的INI文件位於/ etc / uwsgi中,並在uWSGI啟動時成功找到該文件。 我的應用程序的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

[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被配置為代理站點,並且成功完成了代理。 該應用程序啟動並運行正常。 我從網絡瀏覽器上獲取它沒有問題。 當我嘗試從應用程序中記錄某些內容時,問題就開始了:

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,但這似乎是非理想的解決方案。 首先,在開發過程中,我使用pserve在本地運行應用程序,該服務會自動調用setup_logging,因此必須根據應用程序所處的環境有條件地對其進行調用。其次,setup_logging需要將配置文件的路徑作為參數,而且我需要能夠在登台和生產環境中使用不同的配置,因此看來我必須要做一些類似的事情,例如在配置文件中添加一個設置,以指定其自身的路徑。 最好是一個復雜的解決方案。

知道如何讓uWSGI來獲取我的日志記錄配置,而不必經歷一堆麻煩嗎?

弄清楚了它,不妨將其留在這里供后代使用,因為網絡上關於皇帝模式的內容似乎很少。 我在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM