我想在日志文件中包含与每个日志行请求相关联的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")
输出:
xxx blah
blah
期望的输出:
xxx blah
xxx blah
答案 0 :(得分:4)
虽然这不是解决此问题的最佳方式,但这可以帮助您而无需更改大量代码。
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')
输出:
xxx:hello
xxx:hi
答案 1 :(得分:1)
而不是:
String nameOfDay
您可以使用
message = "blah\nblah"
logger.debug(message)
这里的原则是每个模块都应该有自己的责任。如果记录器有责任为每条消息添加ID,则呼叫者有责任(即#34;你的")为其提供正确的分区消息。