我希望日志应包含特定时区的日期条目。有没有办法在log4j.properties
强制时区?
现在我正在使用JDK 1.5,因为您已经知道JDK 1.5中存在时区错误,这在JDK 1.5中已被删除。在JDK 1.5的情况下,它默认显示“GMT”时区。我想在Log4j中配置我的特定时区。
答案 0 :(得分:16)
这将允许您在日志的每一行中查看时区信息:
%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”的行。
答案 1 :(得分:4)
最好的方法是使用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
答案 2 :(得分:2)
这有三个步骤:
1)添加log4j-extras
依赖项here
2)将布局设置为EnhancedPatternLayout:
log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
(将stdout
更改为您正在使用的任何追加者)
3)在日期时间模式之后在大括号中添加您的时区
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}{IST} %-5p %c{1}:%L - %m%n
(我的情况就是IST)
答案 3 :(得分:0)
使用org.apache.log4j.helpers.DateLayout
作为布局类,并使用其中的属性timeZone
。
答案 4 :(得分:0)
在date
中添加ConversionPattern
参数。来自PatternLayout
documentation:
日期 -
用于在本地时区输出日志记录事件的日期。 要以通用时间输出日期,请使用
%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
。这些专用日期格式化程序的性能明显优于 {{1}}。
答案 5 :(得分:0)
您可以添加以下内容
Array.prototype.functionName = function(callback){
for (var i = 0; i< this.length; i++){
if(callback(this[i]))
// do something.
else
// do something.
}
}