我一直在阅读 Python日志记录文档,它当然有很多功能……适用于所有内容。
我面临的问题是我不是荷兰人,所以我不确定这样做的正确方法是什么。
我在模拟器中运行事件,我想在每条日志消息前加上模拟时间的时间戳(可能也有一个长度格式化程序,只是为了让它看起来不错)。我可以在Logger
or的子类中更改它Handler
,但我认为这不是正确的方法。
我认为正确的方法是使用 aLoggerAdapter
或 a Filter
。这是正确的,如果是这样,我应该更喜欢哪一个?
当然,如果您只需要在每条日志消息前加上时间戳,您需要做的就是为格式化程序提供适当的格式字符串?如文档中所述。
更新: ALoggerAdapter
更适合上下文信息存在时间较长的情况。例如,在处理多个客户端连接的网络服务器应用程序中,连接详细信息(例如客户端 IP 地址)可能是有用的上下文,因此您将在创建LoggerAdapter
新客户端连接时创建一个实例。这听起来不像您的模拟场景。
Filter
另一方面,如果您可以使用A来获取模拟时间,则可以使用它,例如
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
的格式字符串。