1

我想从 Java 进行系统日志记录。有一个 log4j appender,但它似乎不起作用(无论如何对我来说......虽然谷歌结果显示许多其他人的这个问题仍未解决)。

我正在尝试调试 appender,所以我根据RFC3164编写了以下脚本

它运行,但系统日志中不显示任何日志记录。

// scala
import java.io._
import java.net._
val ds = new DatagramSocket()
val fullMsg = "<11>May 26 14:47:22 Hello World"
val packet = new DatagramPacket(fullMsg.getBytes("UTF-8"), fullMsg.length, 
  InetAddress.getLocalHost, 514)
ds send packet
ds.close

我也尝试过使用 /bin/nc,但它也不起作用。

echo "<14>May 26 15:23:33 Hello world" > nc -u localhost 514

但是,Ubuntu 命令 /usr/bin/logger确实有效。

logger -p user.info hello world
# logs: May 26 15:25:10 dsupport2 jem: hello world

我可能做错了什么?

编辑

nc 和 scala 都生成以下数据包:

jem@dsupport2:~/projects/log4j$ grep -A 10 514 out
xxx.xxx.xxx.xxx:37920(unknown) -> xxx.xxx.xxx.xxx:514(syslog)
Version: 4   Total Lenght: 63   TTL: 64
Packet Number: 4

---[ UDP Data ]------------------------------------------------------

<14>May 26 15:26:33 Hello world 22

看来我无法让 /usr/bin/logger (有效的那个)远程交谈。我假设您应该将本地 syslogd 设置为中继。

编辑

使用 nc,wir​​eshark 显示要格式化的消息,但端口无法访问。

4

3 回答 3

1

您是否尝试过嗅探本地网络流量以查看日志消息是否实际发送,它们是否看起来格式正确等?你可以使用nast或类似的东西。

于 2010-05-26T06:18:10.823 回答
1

需要明确告知 Ubuntu 中的网络防火墙允许到给定端口的流量,这包括 Syslog。

于 2010-05-26T06:21:55.567 回答
1

Syslogd 可能不是在侦听 IP 套接字,而是侦听 unix 域套接字。标准插座是/dev/log. 您将需要使用诸如JUDS 之类的库来连接到此套接字。这将提供一个 OutputStream,您可以将日志记录写入其中。

于 2010-05-29T20:20:32.933 回答