如何使用可由logstash解析的log4j记录正确的时区

时间:2013-10-17 17:41:00

标签: datetime timezone log4j iso8601 logstash

我在log4j中记录正确的日期时间时遇到问题,并使用logstash解析它。 我用log4j(1.2.17)和一个只生成一些日志的小应用程序设置了一个tomcat。 我用%d{ISO8601}记录了时间 结果是时区丢失了,logstash认为它是UTC,因为我用。解析它。

date {
    type => "tomcat"
            match  => [ "orig_timestamp", "ISO8601"]
    }

之后我尝试了以下内容:

                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{ISO8601}%d{Z} %-5p %50.50c - %m%n" />
                </layout>

但是这导致logstash中出现以下错误:

{:timestamp=>"2013-10-17T19:13:12.977000+0200", :message=>"Failed parsing date from field", :field=>"orig_timestamp", :value=>"2013-10-17 19:00:02,059+0200", :exception=>java.lang.IllegalArgumentException: Invalid format: "2013-10-17 19:00:02,059+0200" is malformed at " 19:00:02,059+0200", :level=>:warn}

我认为偏移中缺少:。但是如果没有所有手动尝试和错误,我怎么能这样做呢?我只是说用时区打印iso8601并用时区解析ISO8601?

2 个答案:

答案 0 :(得分:3)

对上述答案稍作修改,我认为时间需要为HH而不是hh才能使它们支持24小时制。

%d{yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ}

答案 1 :(得分:0)

我的解决方案是使用%d{yyyy-MM-dd'T'hh:mm:ss.SSSZZZZ}