当前位置: 首页 > 知识库问答 >
问题:

Log4j2使用syslog appender和RFC5424

司马飞
2023-03-14

当我尝试向远程Linux syslog写入一些消息时,我使用log4j2和appender syslog和format=rfc5424以及bsd.,我的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn" name="MyApp" packages="">
        <Appenders>
            <Syslog name="bsd" host="9.115.114.133" port="514" protocol="UDP" facility="local5"/>
            <Syslog name="RFC5424" format="RFC5424" host="9.115.114.133" 
                protocol="UDP" appName="MyApp" includeMDC="true"
                 facility="LOCAL5" enterpriseNumber="18060" newLine="true"
                  messageId="Audit" id="App"/>    
         </Appenders>
         <Loggers>
         <Logger name="test.main" level="warn">
         <AppenderRef ref="RFC5424"/>
         </Logger>
         <Root level="error">
        <AppenderRef ref="bsd"/>
        </Root>
        </Loggers>

当我运行一个测试程序时,我总是得到如下错误:原因:java.lang.IllegalArgumentException:在org.apache.logging.log4j.message.structuredDataid没有提供结构化id名称。在org.apache.logging.log4j.core.layout.rfc5424layout.java:92)在org.apache.logging.log4j.core.layout.rfc5424layout.createLayout(Rfc5424layout.java:139)在

2014-11-10 03:21:46,252错误为附加程序中的Syslog返回了空对象。2014-11-10 03:21:46,267错误无法定位记录器test.main的附加器RFC5424

我怎样才能摆脱这个错误呢?多谢了。

共有1个答案

百里涛
2023-03-14

您需要包含mdcid属性:

<Syslog name="RFC5424" format="RFC5424" host="9.115.114.133" 
        protocol="UDP" appName="MyApp" mdcId="mdc" includeMDC="true"
        facility="LOCAL5" enterpriseNumber="18060" newLine="true"
        messageId="Audit" id="App"/>
 类似资料:
  • 问题内容: 我有一个使用log4j SyslogAppender(facility = USER)的Java应用程序,我可以在端口514上使用tcpdump看到我的应用程序正在将预期的日志消息作为数据报发送,并且netstat告诉我syslogd(红色帽子)正在运行并且正在监听0.0 .0.0:514,但我看不到/ var / log / messages中发生任何日志记录。 在我的syslog.

  • 问题内容: 我已将应用程序迁移到log4j 2,并通过log4j2.xml对其进行了配置 但是,我正在使用的某些库取决于log4j1。如果我使用以下命令运行该应用程序: log4j 1抱怨找不到配置文件。我正在使用log4j 2,log4j-1.2-api-2.0-rc1.jar提供的log4j 1.x桥。是否可以使用单个log4j2.xml进行配置? 我尝试过的替代方法是同时配置log4j和lo

  • 我已经将应用程序迁移到Log4J2,并通过log4j2.xml对其进行了配置 但是,我使用的一些库依赖于log4j1。如果我使用以下方式运行应用程序: 我尝试的另一种方法是将log4j和log4j2配置在一起: 我担心的是日志配置文件和输出的碎片化。我还担心log4j.xml和log4j2.xml之间可能存在的冲突。例如,logfile Error.log被配置为使用log4j1中的FileApp

  • 我需要实现多个记录器和多个追加器。我的log4j2.xml如下所示: 现在,当我使用这个xml执行代码时,日志被写入最后一个日志文件commonres.log。我是Log4J的新手。如何只写入所需的日志文件? 编辑: 请帮忙。

  • 我想动态地创建一个appender并将其添加到记录器中。然而,这似乎不可能使用slf4j。我可以将我的appender添加到log4j记录器中,但是我无法使用slf4j LoggerFactle检索记录器。 我想做的是:创建一个测试类(而不是jUnit测试),并在构造函数中传递一个记录器,供测试类使用。测试类的每个实例都需要自己的记录器和appender来保存日志,以便以后在HTML报告中使用。

  • SLF4J强制应用程序记录字符串。Log4J2 API支持记录任何CharSequence(如果您想记录文本),但也支持按原样记录任何对象。 Log4j 2 API支持日志记录消息对象、Java 8 lambda表达式和无垃圾日志记录(它在日志记录CharSequence对象时避免创建vararg数组和字符串)。