4
我有一些由Log4J2生成的日誌文件。我使用log4j2.xml配置文件中的JSONLayout將日誌輸出到.json文件中。我JSONLayout的定義是這樣的:解析Logstash中的JSON
<JSONLayout complete="false"></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示例的博客文章。任何幫助真誠感謝!