按模式读取日志文件以检索字段。 Log4J写的日志。是否有可用的解析器?

时间:2015-04-20 13:23:00

标签: java log4j

我有一个由应用程序连续写的日志文件。该应用程序使用log4j进行日志记录。 我无法更改应用程序的log4j配置。

是否有任何java解析器可以读取application / log4j写入的日志,并且基于在应用程序中配置log4j的相同模式,是否可以检索日志中的字段?

有方法还是java解析器?

TQ, 马赫什

1 个答案:

答案 0 :(得分:-1)

是的,有办法。您可以使用logstash在您需要的字段中解析日志文件。由于您没有包含日志格式的示例,因此我将向您展示logstash如何与日志一起使用的示例:

127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] "GET /xampp/status.php HTTP/1.1" 200 3891 "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0"

现在,logstash可以将其作为输入并将其解析为以下字段:

{
    "message" => "127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] \"GET /xampp/status.php HTTP/1.1\" 200 3891 \"http://cadenza/xampp/navi.php\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"",
 "@timestamp" => "2013-12-11T08:01:45.000Z",
   "@version" => "1",
       "host" => "cadenza",
   "clientip" => "127.0.0.1",
      "ident" => "-",
       "auth" => "-",
  "timestamp" => "11/Dec/2013:00:01:45 -0800",
       "verb" => "GET",
    "request" => "/xampp/status.php",
"httpversion" => "1.1",
   "response" => "200",
      "bytes" => "3891",
   "referrer" => "\"http://cadenza/xampp/navi.php\"",
      "agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\""
}

您可以使用elasticsearch将此输出保存到文件或索引中,以便使用Kibana进行搜索和可视化数据。

Logstash使用grok过滤器将日志解析为字段和eben如果您的日志看起来不像这样,您可以使用grok过滤器将日志解析为您需要的字段。 Grok使用正则表达式在日志中查找模式,以便您可以编写自己的正则表达式以满足您的需要,或者您可以使用140个现有模式中的任何一个来匹配时间戳,IP地址,log4j调试级别等。 您需要做的就是创建一个在运行时加载logstash的配置文件, 像这样的东西:

input {
       file {path => "path/to/logfile" } 
}

filter {
       grok {
             match => { "message" => "%{COMBINEDAPACHELOG}" }
       }

}



output {

  stdout { codec => rubydebug }
}

这里%{COMBINEDAPACHELOG}是一个预先编写的正则表达式,它匹配apache服务器日志。您可以查看可用的模式或创建自己的模式。 Logstash,elasticsearch和kibana都是开源的。

您可以查看:how to install and use logstash