为什么 log4j 消息会产生 UTC 时间戳?
Why does log4j message produce timestamps in UTC?
下面的log4j模式布局
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} | %-5p | %-35.35c{1} | %m%n" />
</layout>
以 UTC 而非本地时区生成时间戳。这是为什么?
LANG
在这个 unix 系统上是 en_US.iso885915
。在 shell 中键入 date
会生成具有正确(本地)时区的日期。
我想,问题实际上是 JVM 不使用 OS 时区,而是有自己的 属性 来存储它。
可以通过JVM参数设置,例如:
-Duser.timezone=Europe/Sofia
顺便说一下,如果您使用 Apache Extras for log4j,可以在 log4j 模式中设置 TZ(作为 %d 模式的一部分),如下所示:
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT-4} | %-5p | %-35.35c{1} | %m%n" />
下面的log4j模式布局
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} | %-5p | %-35.35c{1} | %m%n" />
</layout>
以 UTC 而非本地时区生成时间戳。这是为什么?
LANG
在这个 unix 系统上是 en_US.iso885915
。在 shell 中键入 date
会生成具有正确(本地)时区的日期。
我想,问题实际上是 JVM 不使用 OS 时区,而是有自己的 属性 来存储它。
可以通过JVM参数设置,例如:
-Duser.timezone=Europe/Sofia
顺便说一下,如果您使用 Apache Extras for log4j,可以在 log4j 模式中设置 TZ(作为 %d 模式的一部分),如下所示:
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT-4} | %-5p | %-35.35c{1} | %m%n" />