簡體   English   中英

Apache Log4j使用特定時區進行日志記錄

[英]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)

您可以在此處此處參考 java中提供的時區ID列表

您可以添加以下行

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”中的一個來指定,用於指定AbsoluteTimeDateFormatterDateTimeDateFormatterIso8601DateFormatter 例如, %date{ISO8601}%date{ABSOLUTE}

這些專用日期格式化程序的性能明顯優於ToString

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM