Log4net RemoteSyslogAppender 将 <14> 添加到所有消息

Log4net RemoteSyslogAppender adding <14> to all message

我正在使用带有 RemoteSyslogAppender 的 log4net 将日志发送到 logstash/elasticsearch。 附加程序会自动在消息前面添加“<14>”,从而无法对堆栈跟踪进行分组。

这个数字出现在 log4net 发送的每条消息中的标识值之前。我试图添加具有空值的 "identity" 标签,该标签已删除消息的 "identity" 但是 <14> 仍然存在。

<identity value=""/>

这是我当前的 appender 配置

<appender name="RemoteSyslogAppender" type="log4net.Appender.RemoteSyslogAppender" >
  <identity value="somemessage" />
  <param name="RemoteAddress" value="10.3.145.130" />
  <param name="RemotePort" value="5140" />
  <layout type="log4net.Layout.PatternLayout, log4net">
    <param name="ConversionPattern" value="%-5level - %message%newline" />
  </layout>
</appender>

使用此配置,我仍然在 "identity" 值(somemessage)

之前得到 <14>
"message" => "<14>somemessage:    at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)",

logstash 配置在这里无关紧要,但如果有帮助,我可以稍后将其包括在内,我现在使用 {%GREEDYDATA},一旦我弄清楚如何对它们进行分组,我将努力正确解析它。

谢谢

作为 RemoteSyslogAppender documentation states it implements a client for the BSD syslog protocol, defined in RFC 3164<14> 字符串是该协议的一部分,描述了消息的设施和严重性,即系统的哪个部分发出了消息以及它的重要性。有关完整说明,请参阅第 4.1.1 节。

您可以使用 grok 删除或提取此值,例如像这样:

filter {
  grok {
    match => ["message", "<%{INT}>%{GREEDYDATA:message}"]
    overwrite => ["message"]
  }
}

如果您想将数值转换为人类可读的值,您可以使用 syslog_pri filter.