如何通过 uwsgi 强制应用程序的标准输出日志?

Posted

技术标签:

【中文标题】如何通过 uwsgi 强制应用程序的标准输出日志?【英文标题】:How to force application's stdout logs through uwsgi? 【发布时间】:2016-06-01 09:53:07 【问题描述】:

我有 Django 应用程序在 Docker 容器内的 uwsgi 后面运行。 uwsgi 是通过 Dockerfile 中的 ENTRYPOINTCMD 参数启动的。我成功地将它连接到分离的 nginx 容器并在浏览器中检查预期结果。

到目前为止,一切都很好。

现在我想在 Django 容器中查看应用程序日志。但我无法找到 Django 设置 LOGGING 变量和 uwsgi 开关的正确组合。我只看到uwsgi 标准日志,这对我来说没用。

有可能吗?在我看来,我必须制作一些包装 BASH 脚本,例如:

uwsgi --socket 0.0.0.0:80 --die-on-term --module myapp.wsgi:application --chdir /src --daemonize /dev/null
tail -f /common.log```

... 在 Django 中设置 LOGGING 以写入 /common.log 并将其尾部输出。

有更优雅的解决方案吗?

2016 年 2 月 24 日更新:

是的,这是可能的。我在第一次测试中的某个地方犯了错误。我在https://github.com/msgre/uwsgi_logging 上发布了工作示例。

【问题讨论】:

您尝试过哪些LOGGING 选项? 基本上StreamHandler,到标准输出和标准错误。我用manage.py runserver 检查它,日志是可见的(在标准输出上)。当我在后面运行uwsgi 时,我只看到 uwsgi 日志... 'handlers': 'common': 'class':'logging.StreamHandler', 'stream': sys.stderr, # 和 sys.stdout “格式化程序”:“简单”,“级别”:“信息”,,, 【参考方案1】:

使用

log-master=true

在你的 uwsgi-conf.ini 中 或

--log-master

如果你把它作为参数传递

【讨论】:

是的!谢谢!你在哪里找到这个信息的?它有什么作用?我应该对我说,使用 Flask,它只有在我使用 app.logger 而不是任何 logging.logger 时才有效

以上是关于如何通过 uwsgi 强制应用程序的标准输出日志?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 uber-go/zap 根据日志级别记录到标准输出或标准错误?

如何将 Django 标准输出转发到 Elastic Beanstalk 日志?

如何启用 uWSGI 日志记录到文件?

如何使用 Python 在日志文件中复制/捕获标准输出

通过自动化脚本在仪器 iOS 标准输出上自定义日志

在管道中强制标准输出的行缓冲