1

我想使用 log4j2 将我的日志消息发送到 syslog 服务器(在我的情况下为 syslog-ng)。我现在有两个问题

如果我停止 syslog 服务并启动我的应用程序,它会说

2015-04-22 09:56:14,582 ERROR TcpSocketManager (TCP:192.168.0.81:1000)   java.net.ConnectException:

从那时起,我的应用程序挂起,直到抛出异常并且我的应用程序崩溃。

2015-04-22 09:59:21,064 ERROR Unable to write to stream TCP:192.168.0.81:1000 for appender RFC5424

我想要的是log4j尝试发送日志消息,如果服务器不可用,它应该缓冲它,直到服务器再次可用(这可能吗?,我认为immediateFail=false应该这样做)我的第二个问题。

如果我启动我的应用程序(使用 syslog-ng 可用),然后我在一段时间后停止它并重新启动它。它没有重新连接(编辑:好的,它会在一段时间后,但丢失了很多日志消息)。

这是我的 log42.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyAppx" packages="">
<Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
        <PatternLayout
            pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
    </Console>
    <Syslog name="RFC5424" format="RFC5424" host="192.168.0.81" port="1000"
    protocol="TCP" appName="app" mdcId="mdc" includeMDC="true"
    facility="LOCAL0" enterpriseNumber="18060" newLine="true" immediateFail="false"
    messageId="Audit" id="App" ignoreExceptions="true"/>
</Appenders>
<Loggers>
    <Root level="trace">
        <AppenderRef ref="STDOUT" />
        <AppenderRef ref="RFC5424" />
    </Root>
</Loggers>

我对其他解决方案持开放态度,但我想要的是根本不会丢失任何日志消息。迟早所有日志消息都应该在中央站上可用(那是因为我想使用系统日志服务器而不是多个本地文件)

4

0 回答 0