我有一个记录器,其中添加了一个使用自定义格式化程序的处理程序,但是在我通过自定义格式化程序后,我想访问生成的消息。所以我的代码看起来像这样:
import logging
logger = logging.getLogger(__name__)
some_handler = logging.StreamHandler()
some_handler.setFormatter(some_formatter) # some_formatter specified elsewhere
logger.addHandler(some_handler)
现在,当我执行logger.warning('hello')
时,我看到的消息格式与我在some_formatter
中指定的格式一样(因此可能类似于'my message is: hello'
)。但是我想在代码中访问该格式化的消息。如何从代码中的logger.info('hello')
中获取格式化后的消息内容?
答案 0 :(得分:1)
默认日志记录级别为WARNING
,这就是logger.info('hello')
由于INFO
不如WARNING
严重的原因。只需在以下位置添加以下内容即可:
logger.setLevel(logging.INFO)
这会将最低记录的严重性级别设置为INFO
。
关于您的问题,您将需要另一个处理程序。您可以定义自己的Handler
或创建另一个StreamHandler
,并将流设置为StringIO
:
import logging
from io import StringIO
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
stream = StringIO()
some_handler = logging.StreamHandler()
some_handler.setFormatter(some_formatter)
some_other_handler = logging.StreamHandler(stream)
some_other_handler.setFormatter(some_formatter)
logger.addHandler(some_handler)
logger.addHandler(some_other_handler)
# You hadn't specified your desired result format, so... I'm going to assume you want a list and assume all logs are single lined, but you can change it accordingly
def get_stream():
stream.seek(0)
return stream.read().strip().split('\n')
logger.warning("opps")
logger.info("nevermind")
current_streamed = get_stream()
print(current_streamed)
输出:
format: opps
format: nevermind
['format: opps', 'format: nevermind']
前两个来自日志记录,列表来自current_streamed
。