【问题标题】:To to prevent FileHandler logger from impacting other threads?为了防止 FileHandler 记录器影响其他线程?
【发布时间】:2016-02-27 14:56:43
【问题描述】:

我有一个自定义的 django 管理命令,我想捕获该命令运行时的日志输出,并使其可以在单独的文件中下载。类似于 Jenkins 中的“控制台输出”功能。使用 django-after-response 调用此命令,我正在运行 uWSGI。

在管理命令的开头,我这样做:

deploy_log = NamedTemporaryFile()
formatter = logging.Formatter("%(asctime)-15s %(levelname)-8s %(message)s")
file_handler = logging.FileHandler(deploy_log.name)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.INFO)
logging.getLogger('').addHandler(file_handler)

然后在admin命令的最后:

logging.getLogger('').removeHandler(file_handler)

我遇到的问题是,当同时运行多个“部署”时,一个线程的 deploy_log 将包含来自其他线程的条目。我该如何避免这种情况?

【问题讨论】:

  • 恐怕没有办法避免,只能写入不同的日志文件(文件名中有worker ID)
  • @AndreyRusanov 它正在写入不同的日志文件。每个“部署”都会得到一个不同的 NamedTemporaryFile()。
  • 我想我已经通过在我的 uwsgi ini 文件中设置“enable-threads = true”来修复它。
  • 请把它作为答案

标签: python django logging uwsgi


【解决方案1】:

我相信我已经找到了解决方案。我必须将以下内容添加到我的 uwsgi vassal ini 文件中:

enable-threads = true

现在日志文件不会混在一起了。

【讨论】:

    猜你喜欢
    • 2015-02-05
    • 2015-12-25
    • 2015-04-24
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2015-08-17
    • 2014-08-07
    • 2022-01-19
    相关资源
    最近更新 更多