繁体   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