在 python 中,记录到 syslog 相当简单:
syslog.openlog("ident")
syslog.syslog(0, "spilled beer on server")
syslog.closelog()
Java中是否有同样简单的方法?经过相当多的谷歌搜索,我一直无法找到一种不需要重新配置 rsyslogd 或 syslogd 的易于理解的方法。如果没有等效项,那么记录到 syslog 的最简单方法是什么?
我能想到的最接近的方法是使用Log4J并配置SyslogAppender以便它写入 syslog。抱歉,这不像在 Python 中那么容易!
在没有 udp 的情况下直接访问日志的一种方法是使用syslog4j。我不一定说它很简单,但至少不需要重新配置系统日志。
这是我能想到的最简单的客户端代码:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
// java Syslog localhost "Hello world"
public class Syslog {
public static void main(String[] args) throws Exception {
InetAddress address = InetAddress.getByName(args[0]);
byte[] bytes = args[1].getBytes();
DatagramSocket socket = new DatagramSocket();
try {
DatagramPacket data = new DatagramPacket(bytes, bytes.length, address, 514);
socket.send(data);
} finally {
socket.close();
}
}
}
和服务器(syslogd):
import java.net.DatagramPacket;
import java.net.DatagramSocket;
// java SyslogD
public class SyslogD {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(514);
try {
for(;;) {
DatagramPacket data = new DatagramPacket(new byte[4096], 4096);
socket.receive(data);
System.out.println("[" + data.getAddress().toString() + "] " + new String(data.getData(),0,data.getLength()));
}
} finally {
socket.close();
}
}
}