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