syslog数据接收并处理
1、导包:
<dependency><groupId>org.graylog2</groupId><artifactId>syslog4j</artifactId><version>0.9.60</version></dependency>
2、重写接收处理器:
import org.graylog2.syslog4j.server.SyslogServerEventIF;
import org.graylog2.syslog4j.server.SyslogServerIF;
import org.graylog2.syslog4j.server.SyslogServerSessionEventHandlerIF;
import org.graylog2.syslog4j.util.SyslogUtility;import java.io.UnsupportedEncodingException;
import java.net.SocketAddress;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class SyslogServerEventHandlerTest implements SyslogServerSessionEventHandlerIF {//extends PrintStreamSyslogServerEventHandler {private String syslog;//重写event方法public void event(Object session, SyslogServerIF syslogServer, SocketAddress socketAddress, SyslogServerEventIF event) {//判断传输时间是否存在,不存在将现在的时间设置为传输时间String date = (event.getDate() == null ? new Date() : event.getDate()).toString();//将解析日志的生成端,<<3是要该数左移动三位计算String facility = SyslogUtility.getFacilityString(event.getFacility() << 3);//讲解析日志的级别,级别越大越低String level = SyslogUtility.getLevelString(event.getLevel());//获取当前的源设备IPString sourceIP = getIPAddress(socketAddress.toString());//获取到信息主体String msg = event.getMessage();//放入信息setSyslog("{" + facility + "} " + date + " " + level + " " + msg + " " + sourceIP);try {msg = new String(event.getMessage().getBytes(), StandardCharsets.UTF_8);//打印信息
// System.out.println(getSyslog());System.out.println(msg);} catch (Exception e) {System.err.println("UnsupportedEncodingException");}}public String getSyslog() throws UnsupportedEncodingException {return new String(syslog.getBytes(), "UTF-8");}public void setSyslog(String syslog) {this.syslog = syslog;}//获取到该字符串里的ip地址private String getIPAddress(String bString) {String regEx = "((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)";Pattern p = Pattern.compile(regEx);Matcher m = p.matcher(bString);String result = "";while (m.find()) {result = m.group();break;}return result;}@Overridepublic void initialize(SyslogServerIF syslogServer) {}@Overridepublic void destroy(SyslogServerIF syslogServer) {}@Overridepublic Object sessionOpened(SyslogServerIF syslogServer, SocketAddress socketAddress) {return null;}@Overridepublic void exception(Object session, SyslogServerIF syslogServer, SocketAddress socketAddress, Exception exception) {}@Overridepublic void sessionClosed(Object session, SyslogServerIF syslogServer, SocketAddress socketAddress, boolean timeout) {}
}
3、多线程调用接收处理器:
import org.graylog2.syslog4j.server.SyslogServer;
import org.graylog2.syslog4j.server.SyslogServerConfigIF;
import org.graylog2.syslog4j.server.SyslogServerEventHandlerIF;
import org.graylog2.syslog4j.server.SyslogServerIF;public class UDPSyslogServerFinalTest implements Runnable {private static UDPSyslogServerFinalTest UDPSyslogServerFinal = null;//syslog服务器配置文件用于服务器关闭private SyslogServerIF serverIf = null;public SyslogServerIF getServerIF() {return serverIf;}private void setServerIF(SyslogServerIF serverIF) {this.serverIf = serverIF;}private UDPSyslogServerFinalTest() {}//用单例模式去书写public static synchronized UDPSyslogServerFinalTest getUDPSyslogServer() {if (UDPSyslogServerFinal == null) {UDPSyslogServerFinal = new UDPSyslogServerFinalTest();}return UDPSyslogServerFinal;}@Overridepublic void run() {//实例化接收处理方法SyslogServerEventHandlerIF eventHandler = new SyslogServerEventHandlerTest();//传入UDP协议参数实例化具体服务器 就是这个位置不同,如果你闲麻烦可以用自己优化一下算法然后将两个合为一个SyslogServerIF serverIF = SyslogServer.getInstance("udp");//从服务器里获取配置信息变量SyslogServerConfigIF config = serverIF.getConfig();//设置监听地址0.0.0.0为监听网络内全部地址config.setHost("0.0.0.0");//设置监听地址为514,514为syslog默认地址config.setPort(514);//放入接收方法config.addEventHandler(eventHandler);//初始化服务器serverIF.initialize("udp", config);System.out.println("server start udp");//设置服务器变量,用来外部调用关闭setServerIF(serverIF);//服务器启动serverIF.run();}
}
4、开启监听:
UDPSyslogServerFinalTest udpSyslogServerFinalTest = UDPSyslogServerFinalTest.getUDPSyslogServer();Thread s = new Thread(udpSyslogServerFinalTest);s.start();
5、模拟发送syslog数据
@SneakyThrows@Testpublic void syslogClientSend() {SyslogIF syslog = Syslog.getInstance("udp");syslog.getConfig().setSendLocalName(false);//根据方法名就可看出是发送名称
// syslog.getConfig().setSendLocalTimestamp(false);//发送时间syslog.getConfig().setHost("192.168.0.104");syslog.getConfig().setPort(514);StringBuffer eventCvs = new StringBuffer();String str = "666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666";TimeInterval timer = DateUtil.timer();for (int m = 0; m < 100000; m++) {syslog.log(SyslogConstants.LEVEL_DEBUG, URLDecoder.decode(str, String.valueOf(StandardCharsets.UTF_8)));eventCvs.delete(0,eventCvs.length());}Thread.sleep(3000);System.out.println("cast time:" +timer.interval());}
syslog数据接收并处理相关推荐
- linux内核网络协议栈--数据接收流程图(五)
各层主要函数以及位置功能说明: 1)sock_read:初始化msghdr{}的结构类型变量msg,并且将需要接收的数据存放的地址传给msg.msg_iov->iov_base. net/soc ...
- STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收
参考资料:1.ST HAL库官网资料 2.https://blog.csdn.net/u014470361/article/details/79206352#comments 一.STM32CubeM ...
- matlab制作以太网数据接收上位机_Python制作串口通讯上位机
串口通讯具有简单易用的特点广泛应用于测试设备的通讯和数据传递.单片机与计算机的通讯等,本案例基于Python语言制作一个用于接收燃油质量流量计的串口通讯上位机,实现数据的读取和保存. 1. 相关知识点 ...
- 酷友观点/经验:支付接口返回数据接收地址,session数据丢失(或者说失效)的问题浅析(原创文章)...
酷友观点/经验:支付接口返回数据接收地址,session数据丢失(或者说失效)的问题浅析(原创文章) 最近手头在开发一个游戏官网,在支付模块采用神州付技术支持,神州付数据表单中要求提供服务器返回地址和 ...
- C# 三种方式实现Socket数据接收(经典)
Stream.Read 方法 当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数. 语法: public abstract int Read(byte[] buffer, in ...
- 手把手教你从0创建STM32串口空闲+DMA数据接收工程
串口通讯是嵌入式系统中最常用的通讯方式. STM32的串口接收普通的方式是在串口读数据寄存器非空RXNE中断(Read data register not empty)中1个字节1个字节的接收串口数据 ...
- 基于STC89C52的韦根数据接收
韦根是一种开放的通讯协议,具体官方介绍如下: Wiegand协议是国际上统一的标准,有很多格式,标准的26-bit 应该是最常用的格式.此外,还有34-bit .37-bit 等格式.格式的含义如下: ...
- supersocke接收不到数据_基于SuperSocket的北斗终端数据接收服务的设计与实现
基于 SuperSocket 的北斗终端数据接收服务的设计与实现 刘 朴 , 莫家勤 * [摘 要] 北斗是我国自主研发的卫星导航定位系统 , 已经被广泛使用于各个领域 , 城市交通管理的核心是车辆监 ...
- layui 传递前端请求_Layui数据表格 前后端json数据接收的方法
先上效果图: 前端数据表格: 编号菜单名称菜单路径菜单图标菜单子菜单操作 编辑 删除 js代码 $(function () { //注意:这里是数据表格的加载数据,必须写 layui.use(['ta ...
最新文章
- OpenCV3.3中K-Means聚类接口简介及使用
- DenseNet网络结构产生的.py文件出错解决
- 英语语法---分词短语详解
- 【drp 11】使用Junit简单测试接口方法
- ActiveMq Windows 配置优化
- 第九篇 并发(进程和线程)
- echarts柱形图x轴y轴互换_数控机床在加工零件时,突然出现X、Y、Z轴失控?如何处理...
- 什么是传感器? 传感器由哪几部分组成? 传感器分类?
- bzoj3771:Triple
- (2)存储过程中可以调用其他存储过程吗?_详解Oracle创建存储过程、创建函数、创建包及实例演示...
- 鸿蒙系统首批机型,华为鸿蒙系统支持的手机型号有哪些 首批公测机型有这些...
- [PetShop]园子里petshop的几篇文章,先来个了解吧
- poj 3694 Network (无向图的 割边 lca )
- proxy ip 收集方式总结
- Python数据分析U3-matplotlib可视化高级
- Redis 配置文件解读
- 机械臂matlab运动学仿真,matlab建立机械臂运动学仿真
- Spring clud 微服务框架学习
- CSR8675学习笔记:I2C Master通信
- MySql模糊查询like通配符使用详细介绍