是否可以指定log4j使用的时区?我需要日志文件中的日期与应用程序的时区不同。log4j的PatternLayout
使用SimpleDateFormat
。不幸的是,似乎没有一种方法可以通过模式字符串来控制SimpleDateFormat
的时区(DateFormat
有setTimeZone
方法,但这没有帮助)。
我看了log4j的源代码,发现SimpleDateFormat
是在PatternParser.finalizeConverter
中被煽动的。不幸的是,没有一个简单的方法来获得DateFormat
来设置时区。
6条答案
按热度按时间dced5bon1#
如果在类路径中使用Log4J extras JAR文件,EnhancedPatternLayout类支持此配置选项。请参阅this link中的Javadoc。它作为%d模式组件的一部分进行处理,如下所示:
您可以下载extras软件包here。
fnx2tebb2#
我的案例...必须将模式布局更改为增强型模式布局。(log4j-1.2.17.jar)
增强的模式布局log4j.appender.logfile.layout.转换模式=[%d{ISO 8601}{GMT+9}]%-5 p- %m%n
dvtswwa33#
上面的日志模式有正确的想法,但不完全正确(你没有得到任何时间戳在日志)。
请使用以下模式:
%d{ISO8601}{GMT-5} %p [%c] - %m%n
或
%d{ISO8601}{GMT-5} %p [%c] - %m%n
个mnowg1ta4#
最好使用类似{America/New_约克}而不是{GMT-5}的格式,因为如果使用夏令时,则通过指定时区将进行自动调整。指定类似GMT-5的格式将仅按指定的小时数调整GMT时区。
fdbelqdn5#
此外,如果您希望动态获取默认时区,则可以扩展EnhancedPatternLayout并覆盖方法“setConversionPattern”,如下所示:
jc3wubiy6#
只需将用大括号括起来的时区附加到日期模式中的%d。
例如,使用%d{DEFAULT}{美洲/约克}而不是%d{DEFAULT}
(In log4j 2您可以使用常规的PatternLayout。在log4j 1(自1.2.16起)中,建议使用EnhancedPatternLayout。)