我使用logback来更新syslog,这就是我配置我的appender的方式:
<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
<syslogHost>localhost</syslogHost>
<facility>LOCAL0</facility>
<suffixPattern>[%thread] %logger %msg</suffixPattern>
</appender>
我更新了rsyslog.conf以侦听UDP事件,取消注释以下行:
# Provides UDP syslog reception
$ModLoad imudp.so
$UDPServerRun 514
在conf更改后重新启动syslog守护程序。
在我的所有测试盒上,它似乎工作得很好!但是,系统syslog上的一个没有被我的进程更新(其他东西正在更新它就好了),我想知道如何调试这个问题?想到的任何事情都会浮现在脑海中?
感谢您的任何想法
答案 0 :(得分:27)
不确定。顺序松散,尝试这4个测试:
<强> 1。测试logback :显而易见的一个:添加FileAppender作为第二个appender并确保事件出现在那里。您的帖子暗示“它”在dev中有效,但我不确定它是否是logback或appender,并且配置代码段没有appender-ref
部分将事件发送到SYSLOG
。
如果您的FileAppender
什么都没有收到,那就是应用程序/环境问题,或者此服务器没有生成提供给appender的事件。
<强> 2。正在生成确认消息:假设FileAppender
收到消息但syslog没有,请运行:
tcpdump -n -i lo -X -s 1500
..在lo
上输出UDP数据包的完整有效负载。让您的应用生成日志消息。您应该看到至少1个发往127.0.0.1:514
的数据包。如果你不这样做,那就是发件人。如果你这样做,那就是rsyslog配置。
第3。确认rsyslog已绑定到端口514 :
lsof -i :514
或者如果您没有lsof
并且确定其他进程未绑定到514:
netstat -ln | grep 514
<强> 4。查看rsyslog接收的内容:如果正在将事件发送到端口514,则在停止实时rsyslogd后,在调试模式下重新启动它并连接到终端:
/etc/init.d/rsyslog stop
rsyslogd -d
你应该看到到达的事件。如果没有人发现问题,那就远远不够了。我在已知良好的J2EE和syslog环境中有一个工作logback config。希望上面的一件事能做到这一点。