带有 LogStash 的 JSON 变体 (Log4J)

标签 json log4j logstash

我不确定这是 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
    }
}

关于带有 LogStash 的 JSON 变体 (Log4J),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22944168/

相关文章:

laravel - 在 laravel 中将数据添加到 elasticsearch 的最佳方法是什么

spring-boot - 如何在 Spring Boot 应用程序中将日志配置为仅采用 JSON 格式?

elasticsearch - 什么是 logstash 的 beats 插件?

c# - 我应该如何解析 JSON,它的键和值的重音被转义而不影响字段值中的转义?

java - 如何从 java.util.Properties 对象创建分层 JSON

java - log4j - RollingFileAppender - 日期模式和 MaxFileSize

java - LOG4J:一个记录器的一个附加程序

javascript - Ajax 调用 API 来检索 JSON 数据。您如何使用回复

Java 对象的 fromString 方法?

java - Log4j 不将日志写入数据库