我有一些Log4J2生成的日志文件.我正在使用log4j2.xml配置文件中的JSONLayout将日志输出到.json文件中.我的JSONLayout定义如下:
当日志输入到我的机器上的日志文件中时,它们会一个接一个地附加,并在logs.log中看起来像这样:
{ "logger":"com.mycompany.myLogger", "timestamp":"1396792374326", "level":"ERROR", "thread":"pool-2-thread-2", "message":"System: unable to perform action", "throwable":"java.lang.NullPointerException\\n\tat com.myCompany.MyClass $.java:432)\\n\tat java.lang.Thread.run(Thread.java:744)\\n" },
我正在尝试构造此JSON,以便我可以从ElasticSearch查询它.在此过程中,我正在尝试向所有记录添加自定义字段.为此,我使用以下内容:
input { file { type => "json" path => "/var/logs/myApp/logs.log" } } filter { json { add_tag => [ "HardcodedTagName"] source => "message" } } output { elasticsearch { protocol => "http" codec => "json" host => "[myServerAddress]" port => "9200" } }
奇怪的是,我的自定义标签似乎没有被添加.与此同时,我真的想将我的JSON分解为我可以在ElasticSearch中查询的字段.我想查询的内容清晰可见.他们是:
水平
信息
时间戳
然而,我似乎无法获得这些信息.当我在Kibana中看到JSON记录时,我只看到如下内容:
{ "_index": "logstash-2014.04.07", "_type": "json", "_id": "tG-s6-5pSnq5HZwLhM6Dxg", "_score": null, "_source": { "message": " \"message\":\"System: unable to perform action\"\r", "@version": "1", "@timestamp": "2014-04-07T18:01:38.739Z", "type": "json", "host": "ip-MyipAddress", "path": "/var/logs/myApp/logs.log" }, "sort": [ 1396893698739, 1396893698739 ] }
最令我惊讶的是,日志级别甚至都没有.线程信息也不是.我很惊讶我找不到使用过滤器的Log4J示例的博客文章.任何帮助都是真诚的感谢!
您不需要使用json过滤器.您可以在输入中指定编解码器格式.
input { file { type => "json" path => "/var/logs/myApp/logs.log" codec => json } }
Logstash会自动将您的日志解析为json格式并添加相应的字段.