【问题标题】:Jython logging gets time wrongJython 日志记录时间错误
【发布时间】:2010-12-16 17:05:07
【问题描述】:

我有一个使用 Python 日志记录模块进行日志记录的 Jython 脚本。在一台机器上,脚本记录正常,而在另一台机器上,记录的时间被转移到未来五小时。大概这与机器处于 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 shell 中打印正确的时间。

编辑:如果我从 Python shell (2.4.3) 查看time.localtime(),那么我会得到一个具有正确本地时间值的元组。如果我从 Jython 脚本 (2.5.2RC1) 中查看 time.localtime(),那么我会看到 GMT 时间。

【问题讨论】:

  • 记录日志的机器是否正确使用GMT?
  • 是的,确实如此:它是一台 Linux 机器,而 Unix 机器在内部使用 GMT,然后它们会进行数学运算。另一台机器......我不确定。我的意思是我知道它是 CentOS 第 5 版(最终版),从 /etc/issues 来看,但我认为它是虚拟化的。在两台机器上,当我从 bash 运行 date 时,我得到了正确的时间。
  • 我也尝试过明确设置log_format.converter=time.localtime 无济于事。

标签: python logging timestamp jython


【解决方案1】:

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

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

谢谢大家!

【讨论】:

    【解决方案2】:

    我会检查您从哪里获得时间戳以确保它是 UTC,并且我会检查您在哪里交出时间戳以确保它实际上被库解释为 UTC。

    【讨论】:

    • 我不会交出时间。所有的时间操作都完全隐藏在日志库中。我只是指定每条日志消息的格式,然后开始记录内容。
    【解决方案3】:

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

    【讨论】:

    • 我不会改变它。除了从其他地方获取log_filelog_sizelogs_count 之外,我发布的代码就是我用于设置记录器的全部代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2013-06-30
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多