[英]How to print multiline logs using python logging module?
我想使用 python 日志模块创建多行记录器。 当我使用下面的代码片段来格式化记录器时:
import logging
logger = logging.getLogger(file_name)
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
logger.addHandler(ch)
当我使用logger.info("""line 1\\nline 2\\n line 3""")时,我得到以下多行日志的输出
2017-07-20 13:21:14,754 - my_logger.py - INFO - line 1
line 2
line 3
我希望我的输出如下:
2017-07-20 13:21:14,754 - my_logger.py - INFO - line 1
2017-07-20 13:21:14,754 - my_logger.py - INFO - line 2
2017-07-20 13:21:14,754 - my_logger.py - INFO - line 3
您可以创建自己的格式化程序:
import logging
class MultilineFormatter(logging.Formatter):
def format(self, record: logging.LogRecord):
save_msg = record.msg
output = ""
for line in save_msg.splitlines():
record.msg = line
output += super().format(record) + "\n"
record.msg = save_msg
record.message = output
return output
比修改您的记录器初始化如下:
formatter = MultilineFormatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
简短的回答,你不能。 您可以执行以下操作:
logger.info('line 1')
logger.info('line 2')
logger.info('line 3')
或者如果你有多行的东西,你可以这样做:
map(logger.info, 'line 1\nline 2\nline 3'.split('\n'))
这些不会同时出现,但会非常接近......
如果我只使用单个日志级别(警告或信息或类似级别),我更愿意使用辅助函数来执行此操作:
def multiline_warning(header, body):
for line in body.splitlines():
logging.warning(f"{header}: {line}")
在上下文中,只需调用:
multiline_warning("stderr", subprocess_result.stderr)
如果使用多个(CRITICAL、ERROR、WARNING、INFO 或 DEBUG),您可以抽象日志级别并将其作为参数传递,并使用 logging.log 代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.