整體來講,若是作企業級日誌管理分析,咱們第一步就須要接入設備的日誌,而大部分的操做系統都是支持syslog的,通常咱們對日誌這種敏感級別不是很高的信息經過UDP的形式從客戶機發送到syslog接收服務器,syslog咱們通常不會主動去採集,而是當客戶機上有操做時產生的日誌會自動發送到syslog接收服務器。下面是一個接收syslog的例子。java
package com.tony.util; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketException; /** * Copyright 2015 HP * All right reserved. * UDP服務類. 採集syslog * @version 1.0 * Creation date: 2015-8-18 - 下午16:32:31 */ public class UdpServerSocket { private byte[] buffer = new byte[1024]; private DatagramSocket ds = null; private DatagramPacket packet = null; private InetSocketAddress socketAddress = null; private String orgIp; /** * 構造函數,綁定主機和端口. * @param host 主機 * @param port 端口 * @throws Exception */ public UdpServerSocket(String host, int port) throws Exception { socketAddress = new InetSocketAddress(host, port); ds = new DatagramSocket(socketAddress); System.out.println("--------------service start----------------"); } public final String getOrgIp() { return orgIp; } /** * 設置超時時間,該方法必須在bind方法以後使用. * @param timeout 超時時間 * @throws Exception */ public final void setSoTimeout(int timeout) throws Exception { ds.setSoTimeout(timeout); } /** * 得到超時時間. * @return 返回超時時間. * @throws Exception - 下午10:34:36 */ public final int getSoTimeout() throws Exception { return ds.getSoTimeout(); } /** * 綁定監聽地址和端口. * @param host 主機IP * @param port 端口 * @throws SocketException - 下午10:36:17 */ public final void bind(String host, int port) throws SocketException { socketAddress = new InetSocketAddress(host, port); ds = new DatagramSocket(socketAddress); } /** * 接收數據包,該方法會形成線程阻塞. * @return 返回接收的數據串信息 * @throws IOException - 下午10:38:24 */ public final String receive() throws IOException { packet = new DatagramPacket(buffer, buffer.length); ds.receive(packet); orgIp = packet.getAddress().getHostAddress(); String info = new String(packet.getData(), 0, packet.getLength()); System.out.println(info); //System.out.println("CONTENT="+info+":SOURCE_IP="+packet.getAddress().getHostAddress()+"SOURCE_PORT:"+packet.getPort()); return info; } /** * 將響應包發送給請求端. * @param bytes 迴應報文 * @throws IOException - 下午11:05:31 */ public final void response(String info) throws IOException { System.out.println("Client IP" + packet.getAddress().getHostAddress() + ",Port:" + packet.getPort()); DatagramPacket dp = new DatagramPacket(buffer, buffer.length, packet .getAddress(), packet.getPort()); dp.setData(info.getBytes()); ds.send(dp); } /** * 設置報文的緩衝長度. * @param bufsize 緩衝長度 - 下午10:47:49 */ public final void setLength(int bufsize) { packet.setLength(bufsize); } /** * 得到發送迴應的IP地址. * @return 返回迴應的IP地址 - 下午10:48:27 */ public final InetAddress getResponseAddress() { return packet.getAddress(); } /** * 得到迴應的主機的端口. * @return 返回迴應的主機的端口. - 下午10:48:56 */ public final int getResponsePort() { return packet.getPort(); } /** * 關閉udp監聽口. - 下午10:49:23 */ public final void close() { try { ds.close(); } catch (Exception ex) { ex.printStackTrace(); } } /** * 測試方法. * @param args * @throws Exception - 下午10:49:50 */ public static void main(String[] args) throws Exception { //這裏的IP是你本機的IP也就是syslog服務器的IP String serverHost = "192.168.100.188"; int serverPort = 514; UdpServerSocket udpServerSocket = new UdpServerSocket(serverHost, serverPort); while (true) { udpServerSocket.receive(); } } }