Log4net:SysLog Appender 示例

Posted

技术标签:

【中文标题】Log4net:SysLog Appender 示例【英文标题】:Log4net: SysLog Appender Example 【发布时间】:2010-01-06 08:48:03 【问题描述】:

我正在寻找有关如何将 Log4net 日志记录到 Syslog 服务器的示例配置。欢迎任何帮助。

【问题讨论】:

【参考方案1】:

我没有发现 Simon Whittemore 的条目很有帮助,这就是让我的 appender 产生“正确”的 syslog 远程消息的原因:

<appender name="RemoteSyslogAppender" type="log4net.Appender.RemoteSyslogAppender">
  <identity value="HepeManok" />
  <layout type="log4net.Layout.PatternLayout" value="%-5p %type: %m%n"/>
  <remoteAddress value="syslog.lameserver.net" />
</appender>

“key”[原文如此] 是 identity 参数,它产生正确(或外观正确)的输出 - 我在 Debian、YMMV 上使用 rsyslog。

绝对不需要或不想发送日期(如 Simon Whittemore 的博客中所述),因为 syslogd 会使用服务器的时区为您添加日期。

这是从我的启用 log4net 的应用收到的一条消息,然后是一条真实消息:

Jun 21 09:58:40 vs2008.local HepeManok: INFO  Irc: irc_OnConnected
Jun 21 09:42:45 chips30 kernel: [10210014.974069] device eth0 entered promiscuous mode

如您所见,“日期时间主机服务:消息”的基本格式都很好,不像

Jun 21 09:38:57 WARN  Irc [(null)] - OnQuit#015

或西蒙的配置将产生的示例:

Jun 21 09:56:42 Hepe Manok.vshost.exe: 21/06/2012 07:54:44,828 | 6 | INFO | Irc | WIN-2008-DEV\Administrator | WIN-2008-DEV | dev | irc_OnConnecting |  | 

【讨论】:

【参考方案2】:
<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
      <param name="RemoteAddress" value="127.0.0.1" />
      <param name="RemotePort" value="514" />
      <layout type="log4net.Layout.PatternLayout, log4net">
        <conversionPattern value="%-5level %logger [%propertyNDC] - %message%newline" />
      </layout>
</appender>

【讨论】:

只是为了完成这个条目:Syslog (en.wikipedia.org/wiki/Syslog) 使用标准分配的 UDP 端口 514【参考方案3】:

您可以尝试log4net.Appender.RemoteSyslogAppender,而不是使用较低级别的UDP appender。您可以在Simon Whittemore 的博客条目Centralised Application logging via Log4Net 中找到示例。

<appender name="RemoteSyslogAppender" type="log4net.Appender.RemoteSyslogAppender">
  <layout type="log4net.Layout.PatternLayout" value="%datedd/MM/yyyy hh:mm:ss,fff | %thread | %level | %logger | %username | %Plog4net:HostName | dev | %message | %exception | "/>
  <remoteAddress value="LOGSERVER" />
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="ALL" />
  </filter>
</appender>

【讨论】:

UdpAppender 只发送/接收车库,但 RemoteSyslogAppender 工作得很好。【参考方案4】:

你也可以试试syslog4net。 syslog4net 通过创建自定义 log4net 布局来工作,该布局将消息写入 Syslog 的RFC5424 standard format。然后,您可以将其连接到任何 log4net 附加程序。通过将我们的 SyslogLayout 类连接到 log4net 的 UdpAppender 或 syslog4net 的自定义 TcpAppender,您可以非常轻松地写入 Syslog 守护程序、splunk 或任何机器数据聚合器。

项目的 github 站点上提供了文档、用法和示例。

【讨论】:

【参考方案5】:

我的服务器登录到运行 syslog-ng 的 ubuntu 服务器。为了正确显示主机名,我使用了这个:

  <appender name="RemoteSyslogAppender" type="log4net.Appender.RemoteSyslogAppender">
    <facility value="local7" />
    <identity value=" %dateyyyy-MM-ddTHH:mm:ss.ffffffzzz %Plog4net:HostName %Papp" />
    <RemoteAddress value="192.168.1.248" />
    <layout type="log4net.Layout.PatternLayout" value="&#9;%Ppid:%logger %m%n"/>
    <RemotePort value="516" />
  </appender>

【讨论】:

你好,这个支持 TCP 和 UDP 吗?谢谢! 我不这么认为。 Syslog 传统上是 UDP,而 RemoteSyslogAppender 派生自 log4net.Appender.UdpAppender。您可以配置 syslog-ng 来监听 TCP 传输,但我不知道您是否可以配置 Appender 以通过 TCP 发送。 @PKCS12 您需要使用RemotingAppender 并将接收器设置为tcp://.....:1514,并且您需要制作类似于RFC3164 的布局。

以上是关于Log4net:SysLog Appender 示例的主要内容,如果未能解决你的问题,请参考以下文章

log4net 存储到oracle 调试 Could not load type [log4net.Appender.OracleAppender]

Logback 的 Syslog Appender

未能找到元素“appender”的架构信息

我的 logback syslog appender 有啥问题?

Mac 上的 Log4j2 Syslog Appender 格式

Log4j2 Syslog Appender 添加垃圾字段