自程序启动以来的Python记录时间

问题描述 投票:13回答:4

我正在使用日志记录模块来创建记录器并输出数据。除了使用$(asctime)s中的logging.Formatter之外,还有一种记录与创建记录器相关的时间戳的好方法吗?

python logging
4个回答
8
投票
您可以编写自己的格式化程序:

from datetime import timedelta import logging import time class ElapsedFormatter(): def __init__(self): self.start_time = time.time() def format(self, record): elapsed_seconds = record.created - self.start_time #using timedelta here for convenient default formatting elapsed = timedelta(seconds = elapsed_seconds) return "{} {}".format(elapsed, record.getMessage()) #add custom formatter to root logger for simple demonstration handler = logging.StreamHandler() handler.setFormatter(ElapsedFormatter()) logging.getLogger().addHandler(handler) log = logging.getLogger('test') log.error("Message 1") time.sleep(5) log.error("Message 2")

您的问题是指从“程序开始”到“记录器创建”所经过的时间,这可能意味着不同的情况。 

这将测量从创建CustomFormatter开始所花费的时间,您可以在程序开始时或创建记录器时执行此操作。


17
投票
使用常规%(relativeCreated)d格式字符串中的%(relativeCreated)d字段将显示自加载Formatter模块以来经过的毫秒数。尽管可能不需要毫秒,但是不需要其他编码。

0
投票
我基于一些stackoverflow想法编写了自己的解决方案。它是logging的子类

logging.Formatter


0
投票
我喜欢Franky1的答案,但我不想失去日志格式的

%(asctime)s样式。这是一个添加%(delta)s样式的解决方案。

import datetime import logging import time # subclass of logging.Formatter class RuntimeFormatter(logging.Formatter): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.start_time = time.time() def formatTime(self, record, datefmt=None): duration = datetime.datetime.utcfromtimestamp(record.created - self.start_time) elapsed = duration.strftime('%H:%M:%S') return "{}".format(elapsed) # add custom formatter to root logger LOGFORMAT = '%(asctime)s - %(levelname)-9s: %(message)s' handler = logging.StreamHandler() fmt = RuntimeFormatter(LOGFORMAT) handler.setFormatter(fmt) logging.getLogger().addHandler(handler) logger = logging.getLogger() # test of the logger output logger.error('Test')
© www.soinside.com 2019 - 2024. All rights reserved.