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

Python日志时区配置问题:如何将服务器日志时间改为GMT时区

让Python日志输出GMT时间的两种实现方式

方法一:直接修改Formatter的时间转换函数

你试的方法一其实是可行的,只需要在初始化日志配置之前设置logging.Formatter.converter为time.gmtime,这样所有默认创建的Formatter都会用GMT时间生成%(asctime)s。

完整代码示例:

import logging
from logging.handlers import RotatingFileHandler
import time

# 先设置转换器为GMT时间
logging.Formatter.converter = time.gmtime

logging.basicConfig(
    handlers=[RotatingFileHandler(f"{file_loc}\\{logfile_nme}", maxBytes=500000, backupCount=1)],
    level=logging.INFO,
    format='%(asctime)s %(levelname)s %(message)s',
    datefmt='%d/%m/%Y %H:%M:%S'
)

这样生成的%(asctime)s就是GMT时间了。

方法二:自定义Formatter并应用

你写的自定义formatTime方法需要放在一个继承自logging.Formatter的子类里,然后把这个自定义Formatter绑定到你的RotatingFileHandler上,而不是依赖basicConfig的默认配置。

完整实现代码:

import logging
from logging.handlers import RotatingFileHandler
import time

# 自定义Formatter类,重写formatTime方法
class GMTLocalFormatter(logging.Formatter):
    def formatTime(self, record, datefmt=None):
        ct_local = time.localtime(record.created)
        ct_gmt = time.gmtime(record.created)
        if datefmt:
            s = time.strftime(datefmt, ct_local) + '\t[' + time.strftime(datefmt, ct_gmt) + ']'
        else:
            t_local = time.strftime(self.default_time_format, ct_local)
            t_gmt = time.strftime(self.default_time_format, ct_gmt)
            s = self.default_msec_format % (t_local, record.msecs) + '\t[' + self.default_msec_format % (t_gmt, record.msecs) + ']' 
        return s

# 手动创建日志处理器和格式化器
handler = RotatingFileHandler(f"{file_loc}\\{logfile_nme}", maxBytes=500000, backupCount=1)
formatter = GMTLocalFormatter(
    fmt='%(asctime)s %(levelname)s %(message)s',
    datefmt='%d/%m/%Y %H:%M:%S'
)
handler.setFormatter(formatter)

# 获取根日志器并添加处理器
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(handler)

这样日志里会同时显示服务器本地时间和GMT时间,格式和你自定义的一致。

注意点

  • 如果用basicConfig,它会在第一次调用日志方法时创建默认的Handler和Formatter,所以要确保修改logging.Formatter.converter的代码在basicConfig之前执行。
  • 自定义Formatter时,建议手动创建Handler和Logger,这样能更灵活控制日志配置,避免basicConfig的自动初始化限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:20:30