Python日志记录-如何获取具有自定义格式程序的日志记录消息的价值

时间:2018-07-19 00:00:18

标签: python logging

我有一个记录器,其中添加了一个使用自定义格式化程序的处理程序,但是在我通过自定义格式化程序后,我想访问生成的消息。所以我的代码看起来像这样:

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')中获取格式化后的消息内容?

1 个答案:

答案 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