我一直在阅读Python logging文档,它确实具有很多功能......适用于所有内容。
我面临的问题是我不是荷兰人,所以我不确定这样做的正确方法是什么。
我在模拟器中运行事件,我想在每个日志消息前面加上模拟时间的时间戳(可能还有一个长度格式化程序,只是为了让它保持良好状态)。我可以在Logger
或Handler
的子类中更改此内容,但我认为这不是正确的方法。
我认为正确的方法是使用LoggerAdapter
或Filter
。这是对的,如果是的话,我应该选择哪一个?
答案 0 :(得分:2)
当然,如果您只需要为每条日志消息添加时间戳前缀,那么您需要做的就是为格式化程序提供适当的格式字符串吗?正如文档中提到的here。
更新:LoggerAdapter
更适合上下文信息适度长寿的情况。例如,在处理多个客户端连接的网络服务器应用程序中,连接详细信息(例如,客户端IP地址)可能是有用的上下文,因此您可以在创建新客户端连接时创建LoggerAdapter
实例。这听起来不像你的模拟场景。
Filter
来获取模拟时间,则可以使用<{1}},例如
class SimulationFilter(logging.Filter):
def __init__(self, context):
"""
Set up with context passed in which allows access
to simulation times.
"""
self.context = context
def filter(self, record):
"Add sim_time field to record, formatted as you wish"
record.sim_time = '%s' % self.context.get_sim_time()
return True
然后在%(sim_time)s
的格式字符串中添加Formatter
。
或者,如果您在进行日志记录呼叫时知道模拟时间,则可以这样做。
logger.debug('Message with %s', arguments, extra={'sim_time': sim_time})
同样在%(sim_time)s
的格式字符串中有Formatter
。