[英]Apache Log4j Logging with specific timezone
我希望日志應包含特定時區的日期條目。 有沒有辦法在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
這有三個步驟:
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)
您可以添加以下行
log4j.appender.S.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss zzz}{GMT} %-5p [%t][%c:%M(%L)] %m%n
使用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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.