java - Log4j2 SyslogAppender 不工作

标签 java logging log4j log4j2 syslog

我正在使用 Log4j 版本 2.1(最新的稳定版本)并尝试使用 Syslog appender 来记录到 syslog 服务器。我正在使用他们官方网站 ( http://logging.apache.org/log4j/2.x/manual/appenders.html#SyslogAppender ) 上提供的配置:

<Syslog name="RFC5424" format="RFC5424" host="localhost" port="514"
        protocol="UDP" appName="MyApp" includeMDC="true"
        facility="LOCAL0" enterpriseNumber="18060" newLine="true"
        messageId="Audit" id="App"/>

当我启动我的应用程序并执行 LogManager.getLogger() 时,我收到一个错误(下面的堆栈跟踪),因此,在我向他们的错误跟踪器报告错误之前,我是不是做错了什么?

014-11-17 18:26:23,640 ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.SyslogAppender for element Syslog. java.lang.reflect.InvocationTargetException
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:606)
  at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:135)
  at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:766)
  at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:706)
  at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:698)
  at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:358)
  at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:161)
  at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:359)
  at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:420)
  at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:138)
  at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:147)
  at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:41)
  at org.apache.logging.log4j.LogManager.getContext(LogManager.java:175)
  at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:426)
  at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:408)
  at Log.<clinit>(Log.java:7)
Caused by: java.lang.IllegalArgumentException: No structured id name was supplied
  at org.apache.logging.log4j.message.StructuredDataId.<init>(StructuredDataId.java:92)
  at org.apache.logging.log4j.core.layout.Rfc5424Layout.<init>(Rfc5424Layout.java:139)
  at org.apache.logging.log4j.core.layout.Rfc5424Layout.createLayout(Rfc5424Layout.java:657)
  at org.apache.logging.log4j.core.appender.SyslogAppender.createAppender(SyslogAppender.java:133)
... 19 more

最佳答案

您需要包含 mdcId 属性。例如:

<Syslog name="RFC5424" format="RFC5424" host="localhost" port="514"
        protocol="UDP" appName="MyApp" mdcId="mdc" includeMDC="true"
        facility="LOCAL0" enterpriseNumber="18060" newLine="true"
        messageId="Audit" id="App"/>

关于java - Log4j2 SyslogAppender 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26978520/

相关文章:

java - 如何创建一个类来执行 Java 中的所有 ActionListener 功能?

java - 通过 HTTP 为 Java 应用程序远程登录

java - 在 Java 中使用 react 器模式透明记录关联/请求 ID

java - 性能问题 System.out.println ("log information ")或使用 log4j 记录器文件?

java - 在 JMockit 中多次重用期望 block

java - 关于具有多个条件的 If 语句的快速问题

java - PageFragment和TextView : Why i get an error?

Git 显示最近 2 天更改的文件

elasticsearch - 使用 Watcher 和 Kibana 监控电子邮件日志,在最后一分钟内每分钟触发一次

java - SLF4J 在信息级别记录错误消息