Python 使用uwsgi运行Pyramid应用程序时无法使日志记录正常工作

Python 使用uwsgi运行Pyramid应用程序时无法使日志记录正常工作,python,logging,pyramid,uwsgi,Python,Logging,Pyramid,Uwsgi,我有一个金字塔应用程序,当通过pserve或uwsgi启动时,它运行良好。当通过pserve启动时,我的日志设置工作正常,但当通过uwsgi启动时,我的日志设置工作不正常。我的贴纸ini的uwsgi部分如下所示: [uwsgi] socket = 127.0.0.1:3099 master = True processes = 1 virtualenv = /opt/data/virtualenvs/some_virtual_env paste = config:%p paste-logger

我有一个金字塔应用程序,当通过
pserve
uwsgi
启动时,它运行良好。当通过
pserve
启动时,我的日志设置工作正常,但当通过
uwsgi
启动时,我的日志设置工作不正常。我的贴纸ini的
uwsgi
部分如下所示:

[uwsgi]
socket = 127.0.0.1:3099
master = True
processes = 1
virtualenv = /opt/data/virtualenvs/some_virtual_env
paste = config:%p
paste-logger = True
buffer-size = 65535
paste-logger = %p
exec uwsgi --master --die-on-term --emperor /etc/uwsgi/apps-enabled
当然,我找到了,并尝试如下配置记录器:

[uwsgi]
socket = 127.0.0.1:3099
master = True
processes = 1
virtualenv = /opt/data/virtualenvs/some_virtual_env
paste = config:%p
paste-logger = True
buffer-size = 65535
paste-logger = %p
exec uwsgi --master --die-on-term --emperor /etc/uwsgi/apps-enabled
但这是行不通的。我的日志配置使用绝对路径,日志文件的目标文件夹允许每个人读写。我想知道一点如何指定
粘贴记录器
,因为根据

upstart的命令行配置定义如下:

[uwsgi]
socket = 127.0.0.1:3099
master = True
processes = 1
virtualenv = /opt/data/virtualenvs/some_virtual_env
paste = config:%p
paste-logger = True
buffer-size = 65535
paste-logger = %p
exec uwsgi --master --die-on-term --emperor /etc/uwsgi/apps-enabled

没有创建自定义日志文件,在uwsgi日志中我没有看到任何有用的消息或错误。非常感谢您对如何使日志工作或调试问题提供的任何帮助。

这并不是您所问的问题,但以下内容在Ubuntu上对我很有用

我使用金字塔模板提供的默认日志记录配置,将日志流式传输到stderr:

# Begin logging configuration

[loggers]
keys = root, myapp

[handlers]
keys = console

[formatters]
keys = generic

[logger_root]
level = INFO
handlers = console

[logger_myapp]
level = DEBUG
handlers =
qualname = myapp

[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

# End logging configuration
Ubuntu中的每个uWSGI应用程序都有自己的配置文件,应该放在 /etc/uwsgi/apps enabled/directory。这里是myapp.ini,例如:

[uwsgi]
plugin = python
virtualenv = /path/to/myapp/virutalenv
paste = config:/path/to/myapp/config.ini
所以,当我使用pserve命令运行应用程序时,我将在控制台中获取日志。当我使用uWSGI运行它时,uWSGI将在/var/log/uWSGI/app/myapp.log中创建输出日志

更新

我只是在uWSGI配置上翻了翻,找到了一个地方,在那里设置了日志文件的位置。uWSGI init.d脚本使用参数:

--daemonize "/var/log/uwsgi/${CONFNAMESPACE}/${CONFNAME}.log"
更新2

在您的情况下,在应用程序中显式设置日志记录可能会有所帮助:

from pyramid.paster import setup_logging

setup_logging("/path/to/config.ini")

这没有帮助,因为我必须将不同的记录器发送到不同的日志文件。但只是好奇:哪里配置了
/var/log/uwsgi/app/myapp.log
?您可能想看看这个答案或它的平行答案: