【问题标题】:Logging to separate files in Python在 Python 中记录到单独的文件
【发布时间】:2019-01-31 02:42:46
【问题描述】:

我正在使用 python 的日志记录模块。我已将其初始化为:

import logging
logger = logging.getLogger(__name__)

在我的每个模块中。然后,在主文件中:

logging.basicConfig(level=logging.INFO,filename="log.txt")

现在,在应用程序中,我也在使用来自 gevent 的 WSGIServer。初始化程序接受一个日志参数,我可以在其中添加一个记录器实例。由于这是一个 HTTP 服务器,因此非常冗长。

我想将我应用程序的所有常规日志记录到“log.txt”,并将 WSGIServer 的日志记录到“http-log.txt”。

我试过这个:

logging.basicConfig(level=logging.INFO,filename="log.txt")
logger = logging.getLogger(__name__)

httpLogger = logging.getLogger("HTTP")
httpLogger.addHandler(logging.FileHandler("http-log.txt"))
httpLogger.addFilter(logging.Filter("HTTP"))

http_server = WSGIServer(('0.0.0.0', int(config['ApiPort'])), app, log=httpLogger)

这会将所有 HTTP 消息记录到 http-log.txt,但也会记录到主记录器。

如何将除 HTTP 消息之外的所有消息发送到默认记录器 (log.txt),而将 HTTP 消息仅发送到 http-log.txt?

编辑:由于人们很快就指出这个Logging to two files with different settings 有答案,请阅读链接的答案,你会看到他们不使用basicConfig,而是分别初始化每个记录器。这不是我使用日志记录模块的方式。

【问题讨论】:

  • 这些都不使用 basicConfig 或模块级日志记录。请不要太受骗,花时间阅读问题。
  • @jonrsharpe 不确定是否重复。那里的问题和答案不涉及记录树同一分支上的两个记录器。

标签: python python-3.x logging


【解决方案1】:

添加以下行以禁用propagation

httpLogger.propagate = False

然后,它将不再将消息传播到其祖先的处理程序,其中包括您为其设置了通用日志文件的根记录器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-25
    • 2022-09-27
    • 2013-02-12
    • 2017-01-31
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多