log4j:时区格式化

时间:2013-09-12 12:05:29

标签: java timezone log4j

我想以“+ hh:mm”格式格式化log4j消息中的时区信息,以便完整的时间戳如下所示: 2013-09-05T09:32:10.703 + 02:00

我知道日期格式说明符“Z”,但输出格式为“+ hhmm”(缺少冒号): 2013-09-10T15:55:34.123 + 0200

有没有办法得到我想要的东西?

2 个答案:

答案 0 :(得分:7)

使用以下模式:

yyyy-MM-dd'T'HH:mm:ss.SSSXXX

java.text.SimpleDateFormat的javadoc中,您可以阅读(X字母):

  

ISO 8601时区:模式字母数指定格式化和解析的格式,如下所示:

ISO8601TimeZone:
        OneLetterISO8601TimeZone
        TwoLetterISO8601TimeZone
        ThreeLetterISO8601TimeZone
OneLetterISO8601TimeZone:
        Sign TwoDigitHours
        Z
TwoLetterISO8601TimeZone:
        Sign TwoDigitHours Minutes
        Z
ThreeLetterISO8601TimeZone:
        Sign TwoDigitHours : Minutes
        Z

e.g。

X       -08; 
XX      -0800; 
XXX     -08:00

如果您的配置文件是log4j.xml,则可以如下所示:

<!-- console -->
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <param name="threshold" value="TRACE" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="conversionPattern"
            value="%d{yyyy-MM-dd'T'hh:mm:ss.SSSXXX} %-5p (%c.java:%L).%M - %m%n" />
    </layout>
</appender>

如果你有一个Java类:

import org.apache.log4j.Logger;

public class Main {
    private static final Logger LOGGER = Logger.getLogger(Main.class);

    public static void main(String[] args) {
        LOGGER.info("Test");
    }
}

输出如下:

2013-09-12T08:08:18.532-05:00 INFO  (Main.java:8).main - Test

答案 1 :(得分:0)

我正在将PatternLayout与logback-classic-1.2.3.jar一起使用,以下日期模式给了我悉尼时区,您需要根据格林尼治标准时间进行更新

"timestamp":"%d{yyyy-MM-dd HH:mm:ss, GMT+10}"