如何为现有的python日志记录格式化程序添加前缀

时间:2015-03-11 18:21:26

标签: python logging

在我的代码中,我从我的客户端获取一个记录器,然后我做了一些事情并将我的分析记录到记录器。

我想将自己的前缀添加到记录器中,但我不想创建自己的格式化程序,只是将我的前缀添加到现有格式器中。

另外,我想在代码完成后删除我的前缀。

从文档中我只能找到创建新格式化程序但不能修改现有格式化程序的方法。有办法吗?

2 个答案:

答案 0 :(得分:8)

你是对的。根据{{​​3}}和Python 3文档,无法在现有格式化程序对象上重置格式,您需要创建新的logging.Formatter对象。但是,在运行时查看对象有_fmt方法来获取现有格式,似乎调整它将起作用。我试过2.7,它的工作原理。以下是示例。

示例代码:

import logging
logger = logging.getLogger('something')
myFormatter = logging.Formatter('%(asctime)s - %(message)s')
handler = logging.StreamHandler()
handler.setFormatter(myFormatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.info("log statement here")

#Tweak the formatter
myFormatter._fmt = "My PREFIX -- " + myFormatter._fmt
logger.info("another log statement here")

输出:

2015-03-11 12:51:36,605 - log statement here
My PREFIX -- 2015-03-11 12:51:36,605 - another log statement here

答案 1 :(得分:0)

您实际上可以通过'basicConfig'设置格式,这在Python文档中已提到:https://docs.python.org/2/howto/logging-cookbook.html#context-info

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)-15s %(name)-5s %(levelname)-8s IP: %(ip)-15s User: %(user)-8s %(message)s')