Apache Log4j使用特定时区进行日志记录

时间:2012-02-02 16:55:34

标签: java timezone log4j

我希望日志应包含特定时区的日期条目。有没有办法在log4j.properties强制时区?

现在我正在使用JDK 1.5,因为您已经知道JDK 1.5中存在时区错误,这在JDK 1.5中已被删除。在JDK 1.5的情况下,它默认显示“GMT”时区。我想在Log4j中配置我的特定时区。

6 个答案:

答案 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)

您可以参考java herehere

中提供的时区ID列表

答案 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”用于指定   AbsoluteTimeDateFormatterDateTimeDateFormatterIso8601DateFormatter   %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.
  }
}