Java Log4j2 Syslog Appender 不发送消息

Posted

技术标签:

【中文标题】Java Log4j2 Syslog Appender 不发送消息【英文标题】:Java Log4j2 Syslog Appender doen't send messages 【发布时间】:2016-06-29 09:45:31 【问题描述】:

我正在尝试使用 Log4j2 Syslog Appender,但未发送任何消息。 我正在使用 WireShark 监控环境,但未检测到任何消息。 在 Windows 7 上运行。

当我使用 Kiwi syslog 时,消息可以正常到达。

这是我的 log4j2 XML 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%dHH:mm:ss.SSS [%t] %-5level %logger36 - %msg%n"/>
    </Console>
           <Syslog name="RFC5424" format="RFC5424" host="localhost" port="514"
            protocol="UDP" appName="MyApp" includeMDC="true"
            facility="USER" enterpriseNumber="18060" newLine="true"
            messageId="Audit" mdcId="mdc" id="App"
            connectTimeoutMillis="1000" reconnectionDelayMillis="5000">
            <LoggerFields>
                <KeyValuePair key="thread" value="%t"/>
                <KeyValuePair key="priority" value="%p"/>
                <KeyValuePair key="category" value="%c"/>
                <KeyValuePair key="exception" value="%ex"/>
                <KeyValuePair key="message" value="%m"/>
            </LoggerFields>
        </Syslog>
      </Appenders>
  <Loggers>
    <Logger name="com.mycorp" level="info" />
        <Root level="info">
            <AppenderRef ref="RFC5424"/>
            <AppenderRef ref="Console"/>
        </Root>
  </Loggers>
</Configuration>

这是我的 Java 代码:

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import java.io.*;
import java.sql.SQLException;

public class SyslogLogger

    private static final Logger LOG = LogManager.getLogger(SyslogLogger.class);

    public static void main (String[] args)throws IOException,SQLException
    
        LOG.error("testing ERROR level");
    

控制台附加程序工作正常,但系统日志不能。

请指教。

【问题讨论】:

检查错误输出。我猜您的 log4j.xml 已损坏,因此使用了默认配置。 Appender 是使用带有属性的“appender”标签配置的。 @Fildor,我正在查看我的控制台输出,没有错误。 @Fildor,我已经更新了问题,请看一下。 【参考方案1】:

尝试下面的代码并检查它:

<appender name="Console" class="org.apache.log4j.ConsoleAppender">
     <param name="Target" value="System.out"/>
     <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%dHH:mm:ss.SSS [%t] %-5level %logger36 - %msg%n"/>
     </layout>
</appender>

【讨论】:

是否需要参考 Syslog Appender 进行任何更改? SysLog appender 必须相应更改。 搜索它,我发现了一个看起来像你的例子:这是一个 log4j2 配置示例。如果您使用的是 log4j 1.2 ,则配置必须像 Jigar 所说的那样。 @Fildor,我在此链接中使用示例 XML,但不起作用。 logging.apache.org/log4j/2.x/manual/…

以上是关于Java Log4j2 Syslog Appender 不发送消息的主要内容,如果未能解决你的问题,请参考以下文章

Mac 上的 Log4j2 Syslog Appender 格式

log4j2 syslog 数据报大小超过 UDP 的限制

log4j2 和 syslog,使用 RFC5424 格式不显示日志消息的可变参数部分

Log4j2 Syslog Appender 添加垃圾字段

log4j2 - Syslog 附加程序和 PatternLayout

将 Apache Storm Log4j2 syslog appender 从 UDP 更改为 TCP