Python logging 如何自定义时间格式?

logging 时间格式在 Formatter 中用 %(asctime)s 输出,datefmt 参数控制格式:datefmt='%Y-%m-%d %H:%M:%S'。毫秒用默认逗号或自定义 formatTime。本文给出示例。

最佳实践
Python logging 如何自定义时间格式?封面

在 Formatter 里用 datefmt 参数:logging.Formatter(fmt='%(asctime)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S')——时间即按该 strftime 格式输出。

基本用法

import logging

handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(
    fmt='%(asctime)s [%(levelname)s] %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
))
logger = logging.getLogger(__name__)
logger.addHandler(handler)

logger.info('启动')   # 2024-01-15 10:30:00 [INFO] 启动

毫秒与 ISO 8601

# 默认 asctime 自带毫秒(逗号分隔):2024-01-15 10:30:00,123
# 自定义 datefmt 后毫秒消失;要 ISO 格式:
datefmt='%Y-%m-%dT%H:%M:%S%z'

# 要毫秒+自定义格式,继承 Formatter 重写 formatTime
class MsFormatter(logging.Formatter):
    def formatTime(self, record, datefmt=None):
        from datetime import datetime
        return datetime.fromtimestamp(record.created).strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]

常用占位符速查

%Y 年、%m 月、%d 日、%H 时(24h)、%M 分、%S 秒、%z 时区。

常见问题(FAQ)

Q:时间显示的是 UTC 还是本地? 默认本地时间;要 UTC 用 logging.Formatter.converter = time.gmtime

Q:dictConfig 里怎么写? formatters 段加 'datefmt': '%Y-%m-%d %H:%M:%S'

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台