我想使用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尝试发送logmessage,如果服务器不可用,它应该缓冲它,直到服务器再次可用(这有可能吗?,我认为immediateFail = false应该这样做)这是我的第二个问题。
如果我启动我的应用程序(使用syslog-ng)然后我会在一段时间后停止它并再次启动它。它没有重新连接(编辑:确定它过了一段时间,但丢失了很多logmessages)。
这是我的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>
我对其他解决方案持开放态度,但我想要的是根本没有丢失logmessage。迟早所有logmessages都应该在中央站点上提供(因为我想使用syslogserver而不是多个本地文件)