Python 将自定义信息添加到日志的最佳方法

Python 将自定义信息添加到日志的最佳方法,python,logging,Python,Logging,我一直在阅读Python文档,它当然有很多功能……无所不包 我面临的问题是,我不是荷兰人,所以我不确定该怎么做 我正在一个模拟器中运行事件,我想在每个日志消息前面加上模拟时间的时间戳(可能也加上一个长度格式化程序,只是为了让它看起来很好)。我可以在Logger或Handler的子类中更改这一点,但我认为这不是正确的方法 我认为正确的方法是使用LoggerAdapter或过滤器。是这样吗?如果是这样,我应该选择哪一种?当然,如果您只需要在每个日志消息前面加上时间戳,那么您所需要做的就是为格式化程序

我一直在阅读Python文档,它当然有很多功能……无所不包

我面临的问题是,我不是荷兰人,所以我不确定该怎么做

我正在一个模拟器中运行事件,我想在每个日志消息前面加上模拟时间的时间戳(可能也加上一个长度格式化程序,只是为了让它看起来很好)。我可以在
Logger
Handler
的子类中更改这一点,但我认为这不是正确的方法


我认为正确的方法是使用
LoggerAdapter
过滤器。是这样吗?如果是这样,我应该选择哪一种?

当然,如果您只需要在每个日志消息前面加上时间戳,那么您所需要做的就是为格式化程序提供适当的格式字符串?如文件中所述

更新:A
LoggerAdapter
更适合于上下文信息寿命较长的情况。例如,在处理多个客户端连接的网络服务器应用程序中,连接详细信息(例如客户端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

我澄清了我想包括的是模拟时间。很抱歉含糊不清。我更新了我的答案以回应你的评论。