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

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

我正在模拟器中运行事件,我想在每条日志消息的前面加上模拟时间的时间戳(可能还使用了长度格式化程序,只是为了使其看起来更好)。 我可以在LoggerHandler的子类中更改此设置,但我认为这不是正确的方法。

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

===============>>#1 票数:2 已采纳

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

更新: LoggerAdapter将更适合于上下文信息存在时间较长的情况。 例如,在处理多个客户端连接的网络服务器应用程序中,连接详细信息(例如客户端IP地址)可能是有用的上下文,因此在创建新的客户端连接时将创建LoggerAdapter实例。 这听起来不像您的模拟方案。

另一方面,如果可以使用Filter来获取仿真时间,则可以使用它,例如

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

然后在Formatter的格式字符串中添加%(sim_time)s

另外,如果您在每次进行记录调用时都知道模拟时间,则可以执行例如

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

并且同样在Formatter的格式字符串中包含%(sim_time)s

  ask by Paul Draper translate from so

未解决问题?本站智能推荐: