我正在使用 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 上的一个(其他东西正在更新它就好了),我想知道如何调试这个问题?想到什么我应该调查的吗?
感谢任何想法
最佳答案
当然。按顺序松散地尝试这 4 个测试:
<强>1。测试 logback:最明显的一个:添加 FileAppender作为第二个附加程序并确保事件出现在那里。您的帖子暗示“它”在开发中有效,但我不确定它是 logback 还是 appender,并且配置片段没有 appender-ref
部分将事件发送到 系统日志
。
如果您的 FileAppender
没有收到任何东西,这是一个应用程序/环境问题,或者此服务器没有生成提供给附加程序的事件。
<强>2。确认正在生成消息:假设 FileAppender
收到消息但 syslog 没有收到消息,运行:
tcpdump -n -i lo -X -s 1500
.. to output the full payload of UDP packets on lo
. Make your app generate a log message. You should see at least 1 packet destined to 127.0.0.1:514
. If you don't, it's the sender. If you do, it's the rsyslog config.
3. Confirm that rsyslog is bound to port 514:
lsof -i :514
or if you don't have lsof
and are sure that another process isn't bound to 514:
netstat -ln | grep 514
<强>4。查看 rsyslog 收到的内容:如果事件正在发送到端口 514,则在停止实时 rsyslogd 后,以 Debug模式重新启动它并附加到终端:
/etc/init.d/rsyslog stop
rsyslogd -d
您应该会看到事件到达。如果这些都没有发现问题所在,那就太离谱了。我有一个工作 logback config在已知良好的 J2EE 和系统日志环境中。不过,希望上面的事情之一能够做到这一点。
关于java - 尝试调试 logback syslog appender 不更新 syslog 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10161809/