Apache Log4j使用特定时区进行日志记录
我希望日志应包含特定时区的日期条目。 有没有办法在log4j.properties
中强制时区?
现在我正在使用JDK 1.5,因为您已经知道JDK 1.5中存在时区错误,该错误在JDK 1.5中被删除。 对于JDK 1.5,默认情况下显示“GMT”时区。 我想在Log4j中配置我的特定时区。
这将允许您在日志的每一行中查看时区信息:
%d{yyyy-MM-dd/HH:mm:ss.SSS/zzz}
诀窍是在模式中包含’zzz’,因为根据Javadoc for java.text.SimpleDateFormat( http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html ) ,这是时区的代码。 Log4J使用与SimpleDateFormat相同的规则。
Log4J Javadoc中有更多细节:
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
查找表中“转换字符”为字母“d”的行。
最好的方法是使用Apache Extras™for Apache log4j™并使用org.apache.log4j.EnhancedPatternLayout替换正常的PatternLayout,如果使用属性文件则执行以下操作:
//log4j.appender.xxx.layout = org.apache.log4j.PatternLayout //Replaced by log4j.appender.xxx.layout = org.apache.log4j.EnhancedPatternLayout
然后,您可以在ConversionPattern中使用%d {ISO8601} {GMT}代替%d,以GMT格式显示您的日期。 可以指定任何时区而不是GMT
使用org.apache.log4j.helpers.DateLayout
作为布局类,并使用属性timeZone
。
在您的ConversionPattern
包含date
参数。 从PatternLayout
文档:
日期 –
用于在本地时区输出日志记录事件的日期。 要以通用时间输出日期,请使用
%utcdate
模式。 日期转换说明符后面可能跟在大括号之间的日期格式说明符。 例如,%date{HH:mm:ss,fff}
或%date{dd MMM yyyy HH:mm:ss,fff}
。 如果没有给出日期格式说明符,则假定为ISO8601格式(Iso8601DateFormatter
)。日期格式说明符允许使用与
ToString
的时间模式字符串相同的语法。为获得更好的结果,建议使用log4net日期格式化程序。 这些可以使用字符串“ABSOLUTE”,“DATE”和“ISO8601”中的一个来指定,用于指定
AbsoluteTimeDateFormatter
,DateTimeDateFormatter
和Iso8601DateFormatter
。 例如,%date{ISO8601}
或%date{ABSOLUTE}
。这些专用日期格式化程序的性能明显优于
ToString
。
您可以添加以下行
log4j.appender.S.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss zzz}{GMT} %-5p [%t][%c:%M(%L)] %m%n
这有三个步骤:
1)在这里添加log4j-extras
依赖项
2)将布局设置为EnhancedPatternLayout: log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
(将stdout
更改为您正在使用的任何appender)
3)在日期时间模式后添加你的时区log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}{IST} %-5p %c{1}:%L - %m%n
(在我的情况下,这里是IST)
您可以在此处或此处参考 java中可用的时区ID列表