前言
Syslog 是一种广泛使用的网络日志协议,通常基于 UDP 传输。在 Java 开发中,有时需要直接对接 Syslog 服务,或者构建简单的日志采集端。这里分享一个基于 UDP 的收发示例,包含原生 Socket 服务端和依赖库的客户端实现。
引入依赖
如果使用 syslog4j 库来简化客户端开发,需要在 pom.xml 中添加以下依赖:
<dependency>
<groupId>org.graylog2</groupId>
<artifactId>syslog4j</artifactId>
<version>0.9.60</version>
</dependency>
服务端实现
服务端采用原生的 DatagramSocket 监听指定端口。这种方式不需要额外依赖,适合轻量级场景。核心逻辑是创建一个 UDP 套接字,进入循环等待数据包到达。
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class MySyslogServer {
public static void main(String[] args) throws Throwable {
// 绑定到 5144 端口
DatagramSocket datagramSocket = new DatagramSocket(5144);
while (true) {
// 准备接收缓冲区
DatagramPacket packet = new DatagramPacket( [], );
{
datagramSocket.receive(packet);
(packet.getData(), , packet.getLength());
System.out.println(packet.getAddress() + + packet.getPort() + + msg);
packet.setData(.getBytes());
datagramSocket.send(packet);
Thread.sleep();
} (Exception e) {
e.printStackTrace();
}
}
}
}

