到目前为止,我只对文件进行简单的日志记录。如果我记录多行字符串,则结果如下:
发出日志:
logging.info('foo\nbar')
日志文件:
2018-03-05 10:51:53 root.main +16: INFO [28302] foo
酒吧
到目前为止,所有不包含“INFO”或“DEBUG”的行都会向操作员报告。
这意味着行bar
被报告了。这是一个误报。
环境:Linux。
如何在Python中设置日志记录,以保留INFO foo\nbar
在一个字符串中并忽略整个字符串,因为它只是“INFO”?
注意:是的,您可以在解释器中过滤日志记录。不幸的是,这不是问题所在。这个问题是不同的。首先发生日志记录。然后解析日志。
以下是可复制该问题的脚本:
import sys
import logging
def set_up_logging(level=logging.INFO):
root_logger = logging.getLogger()
root_logger.setLevel(level)
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(
logging.Formatter('%(asctime)s %(name)s: %(levelname)-8s [%(process)d] %(message)s', '%Y-%m-%d %H:%M:%S'))
root_logger.addHandler(handler)
def main():
set_up_logging()
logging.info('foo\nbar')
if __name__ == '__main__':
main()
经过再次思考,我认为真正的问题是:哪种日志格式是可行的?仅仅删除跨越多行的消息中的换行符会使得一些输出难以读取。另一方面,当前的 logging.info() 与日志文件中的一行之间的1:1关系容易阅读。...... 我不确定
logging.basicConfig(..
,同时展示不同日志级别下你期望的输出是什么? - Chris_Randslogging.info(json.dumps(message))
,它将返回一个包含转义换行符的字符串。或者,你可以创建一个自定义的Formatter
类来自动完成这个操作。 - georgepsarakis