You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Python logging库程序化获取asctime时间戳?

获取logging库中与%(asctime)s一致的时间戳

logging库并没有提供类似getAsctime()的直接方法,但可以通过两种方式生成和%(asctime)s格式完全一致的时间戳:

方法1:利用logging.Formatter生成(推荐,和logging原生逻辑完全对齐)

%(asctime)s的格式是由logging.Formatter处理生成的,因此可以直接实例化Formatter并调用其formatTime方法来获取:

import logging
import json

# 初始化Formatter,默认格式和%(asctime)s一致
formatter = logging.Formatter()
# 创建一个空的LogRecord(仅用于生成时间戳,不影响日志内容)
log_record = logging.LogRecord("", logging.INFO, "", 0, "", (), None)
# 获取和%(asctime)s完全相同格式的时间戳字符串
asctime_str = formatter.formatTime(log_record)

# 将时间戳加入结构化日志
logging.info(
    json.dumps({ 
        'my_logger_name': self.my_name,
        'log_level': self.log_level,
        'message': message,
        'some_data': some_data,
        'asctime': asctime_str
    })
)

如果需要自定义时间格式,只需在初始化Formatter时指定格式字符串即可,比如:

formatter = logging.Formatter("%Y-%m-%d %H:%M:%S")

方法2:手动生成匹配格式的时间戳

logging默认的%(asctime)s格式为%Y-%m-%d %H:%M:%S,%f,且会将微秒截断为三位(比如2024-05-20 14:30:00,123)。可以直接用datetime模块生成对应格式的字符串:

from datetime import datetime
import json

# 生成和logging默认asctime一致的时间戳
asctime_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S,%f")[:-3]

# 加入结构化日志
logging.info(
    json.dumps({ 
        'my_logger_name': self.my_name,
        'log_level': self.log_level,
        'message': message,
        'some_data': some_data,
        'asctime': asctime_str
    })
)

补充说明

%(asctime)s本质是日志记录被格式化时,由Formatter根据日志记录的created时间戳(即日志事件发生的时间戳,浮点数格式)转换而来的字符串,并非Logger对象的固有属性,因此没有直接的 getter 方法。上面两种方法都能保证生成的时间戳和原生%(asctime)s完全一致。

内容的提问来源于stack exchange,提问作者GrinnS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:29:54