使用Python登录到单独的文件

时间:2018-08-24 15:22:33

标签: python python-3.x logging

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

import logging
logger = logging.getLogger(__name__)

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

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

现在,在应用程序中,我还使用了来自gevent的WSGIServer。初始化程序带有一个log参数,我可以在其中添加一个logger实例。由于这是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而是分别初始化每个记录器。这不是我使用日志记录模块的方式。

1 个答案:

答案 0 :(得分:2)

添加以下行以禁用propagation

httpLogger.propagate = False

然后,它将不再将消息传播到其祖先的处理程序,该处理程序包括已为其设置常规日志文件的根记录程序。