我想在日志文件中包含与每个日志行的请求相关联的 id 。我有通过日志过滤器检索请求 ID 的机制,工作正常。
我的问题是,当日志行包含换行符时,该行当然会被包裹到“裸”行上。有没有办法告诉日志库拆分消息,并将格式应用于拆分的每个元素?
import logging
logger = logging.getLogger()
handler = logging.StreamHandler()
formatter = logging.Formatter(
"%(requestid)s\t%(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.debug("blah\nblah")
Run Code Online (Sandbox Code Playgroud)
输出:
xxx blah
blah
Run Code Online (Sandbox Code Playgroud)
期望的输出:
xxx blah
xxx blah
Run Code Online (Sandbox Code Playgroud)
尽管这不是解决此问题的最佳方法,但是这将有助于您无需更改大量代码。
import logging
class CustomHandler(logging.StreamHandler):
def __init__(self):
super(CustomHandler, self).__init__()
def emit(self, record):
messages = record.msg.split('\n')
for message in messages:
record.msg = message
super(CustomHandler, self).emit(record)
log = logging.getLogger()
handler = CustomHandler()
formattor = logging.Formatter("xxx:%(message)s")
handler.setFormatter(formattor)
log.addHandler(handler)
log.setLevel(logging.DEBUG)
if __name__ == '__main__':
log.debug('hello\nhi')
Run Code Online (Sandbox Code Playgroud)
输出:
xxx:hello
xxx:hi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2566 次 |
| 最近记录: |