10

我正在使用 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 回答 1

28

当然。松散地按顺序尝试以下 4 个测试:

1. 测试 logback:显而易见的一个:添加一个FileAppender作为第二个 appender 并确保事件出现在那里。您的帖子暗示“它”在 dev 中有效,但我不确定它是 logback 还是 appender,并且配置片段没有appender-ref将事件发送到SYSLOG.

如果您FileAppender什么也没收到,那是应用程序/环境问题,或者此服务器未生成提供给 appender 的事件。

2.确认消息正在生成:假设FileAppender收到消息但系统日志没有,运行:

tcpdump -n -i lo -X -s 1500

.. 输出 UDP 数据包的完整负载lo。让您的应用生成日志消息。您应该看到至少 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 配置。不过,希望上面的一件事能做到这一点。

于 2012-04-15T19:22:48.083 回答