【发布时间】: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