Jython日志时间错误
我有一个用Jython写的脚本,它使用Python的日志模块来记录日志。在一台机器上,脚本的日志记录正常,而在另一台机器上,记录的时间却提前了五个小时。推测这可能和那台机器的时区是GMT-5有关。你觉得这可能是什么原因呢?
这是我创建日志对象的方式:
log = logging.getLogger("my_log")
log.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(
log_file,
maxBytes=log_size,
backupCount=logs_count)
log_format = logging.Formatter("%(asctime)s:%(levelname)s:%(message)s")
handler.setFormatter(log_format)
handler.setLevel(logging.DEBUG)
log.addHandler(handler)
我查看了log_format.converter
这个函数。我确保了有问题的机器上的时间设置是正确的。而且我也确认了在Python的命令行中打印出的时间是正确的。
补充说明:如果我在Python命令行(2.4.3)中查看time.localtime()
,我得到的是一个包含正确本地时间的元组。但如果我在Jython脚本(2.5.2RC1)中查看time.localtime()
,我看到的时间却是GMT时间。
3 个回答
0
我建议你检查一下你获取时间戳的地方,确保它是以UTC时间格式获取的。同时,也要检查一下你把时间戳传递给库的地方,确保这个库确实把它当作UTC时间来处理。
0
log_format.converter
这个设置是什么呢?根据文档,它默认是time.localtime
。如果你把它改成time.gmtime
,那么所有的时间都会使用格林威治标准时间(GMT)。
1
我想我找到了问题所在。显然,Java本身获取的时间是错的,原因是那个有问题的机器上Java的时区设置不正确。通过在 /etc/profile.d/java.sh
文件中添加 export TZ='US/East'
似乎解决了这个问题。
我花了一些时间才弄明白这一点,因为在命令行中运行 date
命令时,输出的本地时间和时区信息都是正确的。连Python也能正确识别时区。
谢谢大家!