1

在 python 中,记录到 syslog 相当简单:

syslog.openlog("ident")
syslog.syslog(0, "spilled beer on server")
syslog.closelog()

Java中是否有同样简单的方法?经过相当多的谷歌搜索,我一直无法找到一种不需要重新配置 rsyslogd 或 syslogd 的易于理解的方法。如果没有等效项,那么记录到 syslog 的最简单方法是什么?

4

3 回答 3

1

我能想到的最接近的方法是使用Log4J并配置SyslogAppender以便它写入 syslog。抱歉,这不像在 Python 中那么容易!

于 2013-08-13T21:28:32.790 回答
1

在没有 udp 的情况下直接访问日志的一种方法是使用syslog4j。我不一定说它很简单,但至少不需要重新配置系统日志。

于 2013-08-16T00:01:14.123 回答
0

这是我能想到的最简单的客户端代码:

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();
    }
  }
}
于 2014-07-22T16:51:20.440 回答