2010-12-16 130 views
1

我有一个使用Python日志记录模块进行日志记录的Jython脚本。在一台机器上,脚本记录良好,另一台记录的时间则转移到未来五个小时。据推测,这与格林威治标准时间-5时的机器有关。你认为会导致这个问题?Jython日志记录时间错误

下面是如何创建的日志对象:

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 shell中打印正确的时间。

编辑:如果我看time.localtime()从Python的外壳(2.4.3),然后我得到正确的本地时间值的元组。如果我从Jython脚本(2.5.2RC1)中查看time.localtime(),那么我可以看到GMT时间。

+0

记录正确的机器是否使用GMT? – Velociraptors 2010-12-16 17:24:56

+0

是的,它的确如此:它是一台Linux机器,Unix机器在内部使用GMT,然后进行数学计算。另一台机器......我不确定。我的意思是我知道它是CentOS第5版(Final),从/ etc/issues来看,但我认为它是虚拟化的。在两台机器上,当我从bash运行'date'时,我得到正确的时间。 – wilhelmtell 2010-12-16 17:32:00

+0

我也尝试明确设置'log_format.converter = time.localtime'无济于事。 – wilhelmtell 2010-12-16 17:59:07

回答

1

我想我找到了问题。显然,Java本身让时间错了,原因是在有问题的机器上,Java的时区设置不正确。 /etc/profile.d/java.sh中的export TZ='US/East'似乎解决了这个问题。

这花了我一些时间,因为运行date从shell输出正确的本地时间和时区信息。 Python也能够正确地计算出时区。

谢谢你们!

0

我会检查你在哪里获得你的时间戳,以确保它在UTC,我会检查你交出时间戳的地方,以确保它实际上被库解释为UTC。

+0

我没有交出时间。所有的操作都完全隐藏在日志库中。我只是指定每条日志消息的格式,然后开始记录日志。 – wilhelmtell 2010-12-16 17:22:17

0

什么是log_format.converter设置为?根据documentation,它默认为time.localtime。如果您将其更改为time.gmtime,则所有时间都将使用GMT。

+0

我没有改变它。我发布的代码是设置记录器的所有内容,除了从别处获取'log_file','log_size'和'logs_count'外。 – wilhelmtell 2010-12-16 17:27:52

+0

是否将其更改为'time.gmtime'是一种可接受的解决方法? – Velociraptors 2010-12-16 17:50:22