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