Python 将自定义信息添加到日志的最佳方法
我一直在阅读Python文档,它当然有很多功能……无所不包 我面临的问题是,我不是荷兰人,所以我不确定该怎么做 我正在一个模拟器中运行事件,我想在每个日志消息前面加上模拟时间的时间戳(可能也加上一个长度格式化程序,只是为了让它看起来很好)。我可以在Python 将自定义信息添加到日志的最佳方法,python,logging,Python,Logging,我一直在阅读Python文档,它当然有很多功能……无所不包 我面临的问题是,我不是荷兰人,所以我不确定该怎么做 我正在一个模拟器中运行事件,我想在每个日志消息前面加上模拟时间的时间戳(可能也加上一个长度格式化程序,只是为了让它看起来很好)。我可以在Logger或Handler的子类中更改这一点,但我认为这不是正确的方法 我认为正确的方法是使用LoggerAdapter或过滤器。是这样吗?如果是这样,我应该选择哪一种?当然,如果您只需要在每个日志消息前面加上时间戳,那么您所需要做的就是为格式化程序
Logger
或Handler
的子类中更改这一点,但我认为这不是正确的方法
我认为正确的方法是使用
LoggerAdapter
或过滤器。是这样吗?如果是这样,我应该选择哪一种?当然,如果您只需要在每个日志消息前面加上时间戳,那么您所需要做的就是为格式化程序提供适当的格式字符串?如文件中所述
更新:ALoggerAdapter
更适合于上下文信息寿命较长的情况。例如,在处理多个客户端连接的网络服务器应用程序中,连接详细信息(例如客户端IP地址)可能是有用的上下文,因此您可以在创建新客户端连接时创建LoggerAdapter
实例。这听起来不像你的模拟场景
另一方面,如果可以使用过滤器来获取模拟时间,则可以使用过滤器,例如
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
然后在格式化程序的格式字符串中添加%(模拟时间)s
或者,如果您知道每次进行日志调用时的模拟时间,您可以只执行以下操作:
logger.debug('Message with %s', arguments, extra={'sim_time': sim_time})
同样,在您的格式化程序的格式字符串中有%(模拟时间)s
。我澄清了我想包括的是模拟时间。很抱歉含糊不清。我更新了我的答案以回应你的评论。