添加自定义信息以进行日志记录的最佳方法

时间:2013-04-17 22:25:40

标签: python logging

我一直在阅读Python logging文档,它确实具有很多功能......适用于所有内容。

我面临的问题是我不是荷兰人,所以我不确定这样做的正确方法是什么。

我在模拟器中运行事件,我想在每个日志消息前面加上模拟时间的时间戳(可能还有一个长度格式化程序,只是为了让它保持良好状态)。我可以在LoggerHandler的子类中更改此内容,但我认为这不是正确的方法。

我认为正确的方法是使用LoggerAdapterFilter。这是对的,如果是的话,我应该选择哪一个?

1 个答案:

答案 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