我不确定这是 this one 的后续问题还是单独的问题。有一些关于 LogStash 的内容没有被点击。为此,我为相关问题道歉。尽管如此,我还是会发疯。

我有一个将日志写入文件的应用程序。每个日志条目都是一个 JSON 对象。我的 .json 文件示例如下所示:

{ 
  "logger":"com.myApp.ClassName", 
  "timestamp":"1456976539634", 
  "level":"ERROR", 
  "thread":"pool-3-thread-19", 
  "message":"Danger. There was an error", 
  "throwable":"java.Exception" 
}, 
{ 
  "logger":"com.myApp.ClassName", 
  "timestamp":"1456976539649", 
  "level":"ERROR", 
  "thread":"pool-3-thread-16", 
  "message":"I cannot go on", 
  "throwable":"java.Exception" 
} 

这种格式是从 Log4J2 的 JsonLayout 创建的。我正在尽我最大的努力将日志条目输入 LogStash。为了尝试这样做,我创建了以下 LogStash 配置文件:

input { 
  file { 
    type => "log4j" 
    path => "/logs/mylogs.log" 
  } 
} 
output { 
  file { 
    path => "/logs/out.log" 
  } 
} 

当我打开/logs/out.log 时,我看到了一团糟。有 JSON。但是,我没有看到 Log4J 生成的“级别”属性或“线程”属性。可以在此处查看记录的示例:

{"message":"Danger. There was an error","@version":"1","@timestamp":"2014-04-08T17:20:10.035Z","type":"log4j","host":"ip-myAddress","path":"/logs/mylogs.log"} 

有时我什至会遇到解析错误。我需要我的属性(property)仍然是属性(property)。我不希望它们塞进消息部分或输出中。我有一种预感,这与编解码器有关。然而,我不确定。我不确定是否应该更改 logstash 输入配置上的编解码器。或者,如果我应该更改输出配置上的输入。我非常感谢任何帮助,因为我现在已经绝望了。

请您参考如下方法:

你能改变你的日志格式吗?

在我把你的日志格式改成

之后
{ "logger":"com.myApp.ClassName", "timestamp":"1456976539634", "level":"ERROR", "thread":"pool-3-thread-19", "message":"Danger. There was an error",  "throwable":"java.Exception" } 
{ "logger":"com.myApp.ClassName", "timestamp":"1456976539649", "level":"ERROR", "thread":"pool-3-thread-16", "message":"I cannot go on", "throwable":"java.Exception" } 

一行一个 json 日志,日志末尾没有 ",",我可以使用下面的配置来解析 json 消息以对应字段。

input { 
    file { 
       type => "log4j" 
       path => "/logs/mylogs.log" 
       codec => json 
    } 
} 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!