1

我一直在阅读 Python日志记录文档,它当然有很多功能……适用于所有内容。

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

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

我认为正确的方法是使用 aLoggerAdapter或 a Filter。这是正确的,如果是这样,我应该更喜欢哪一个?

4

1 回答 1

2

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

更新: 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)sFormatter的格式字符串。

或者,如果您在进行日志调用时知道模拟时间,则可以执行例如

logger.debug('Message with %s', arguments, extra={'sim_time': sim_time})

并且同样有%(sim_time)sFormatter的格式字符串。

于 2013-04-17T23:12:16.037 回答