Logstash——在log4net.log中分隔事件,该事件可能包含多行

Logstash——在log4net.log中分隔事件,该事件可能包含多行,logstash,logstash-file,Logstash,Logstash File,下面是从log4net生成的典型日志文件 因此,此日志文件由 默认情况下,配置中的分隔符是\n,这意味着每一行都是一个事件 但是在上面的日志文件中,您可以看到一个事件可能有多行。(如错误、过失或其他) 如何配置日志存储以正确划分事件? 我想我可以配置多个分隔符,比如\nINFO\nDEBUG\nERROR\nFAULT。但是声明只能有一个分隔符。这里有一个多行事件。有一种方法可以帮助你处理这个问题 基本思想是定义一个模式,该模式标识日志条目的开头(在您的情况下,是日志级别),然后将所有其他行滚动

下面是从log4net生成的典型日志文件

因此,此日志文件由

默认情况下,配置中的分隔符是
\n
,这意味着每一行都是一个事件

但是在上面的日志文件中,您可以看到一个事件可能有多行。(如错误、过失或其他)

如何配置日志存储以正确划分事件?


我想我可以配置多个分隔符,比如
\nINFO
\nDEBUG
\nERROR
\nFAULT
。但是声明只能有一个分隔符。

这里有一个多行事件。有一种方法可以帮助你处理这个问题


基本思想是定义一个模式,该模式标识日志条目的开头(在您的情况下,是日志级别),然后将所有其他行滚动到前一行。

这里有一个多行事件。有一种方法可以帮助你处理这个问题


基本思想是定义一种模式,用于标识日志条目的开头(在您的情况下为日志级别),然后将所有其他行滚动到前一行。

以下配置应正确地对事件进行分隔

输入配置:

input { 
    file {
        path => "/absolute/path/here.log"
        type => "log4net"
        codec => multiline {
                    pattern => "^(DEBUG|WARN|ERROR|INFO|FATAL)"
                    negate => true
                    what => previous
                }
      }
}

下面的配置应该正确地划分事件

输入配置:

input { 
    file {
        path => "/absolute/path/here.log"
        type => "log4net"
        codec => multiline {
                    pattern => "^(DEBUG|WARN|ERROR|INFO|FATAL)"
                    negate => true
                    what => previous
                }
      }
}

回答正确。我刚刚添加了一个示例配置。有人编辑了这个答案,因为似乎在LS5中删除了多行过滤器。因为我知道很多人都在运行旧版本,所以我将在这里添加该选项作为评论。回答正确。我刚刚添加了一个示例配置。有人编辑了这个答案,因为似乎在LS5中删除了多行过滤器。因为我知道很多人都在运行旧版本,所以我将在这里添加该选项作为注释。