如何让Syslogging在JVM上运行?

时间:2010-05-26 06:12:32

标签: java scala syslog

我想从Java做syslogging。有一个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&amp; 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显示要格式化的消息,但该端口无法访问。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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