一个基于Java的syslog服务器,大家都来看看啊!

前言

当时接到要开发syslog功能时,我的表情是这样的在这里插入图片描述
啥是syslog啊?我没有听说过啊?这东西有什么用啊?懵逼三连在这里插入图片描述

然后问问我大佬,他说道syslog就是巴拉巴拉的说了一大堆,我全程嗯嗯啊啊的点头,然后大佬说完了问我听懂了吗?我回复听懂了其实我是这个样子的在这里插入图片描述
我就听懂三点,第一要用java去开发,第二能支持TCP和UDP两种协议,还有可操控的,就这三点于是我开始了设计和研究啥是syslog日志服务器。

前期准备

这里写着需要准备的东西:

  1. 一双健全的手 ,能动就行;
  2. 编译器,ecplise或者idea都可以,我这里用的是ecplise;
  3. syslog解析jar包 这里用的是syslog4j的jar包,mvn项目的话maven地址 maven地址 提取码 mve8 jar地址
    注意: 假如你本地maven项目引用的镜像是阿里云你可以将版本改为0.9.46,就像我这里
    在这里插入图片描述
    4.你要懂得syslog是什么传送门

功能效果图

TCP服务器和TCP客户端运行结果:
在这里插入图片描述
TCP服务器和TCP客户端运行结果:
在这里插入图片描述
运用到项目里的结果:
在这里插入图片描述
操作页面:
在这里插入图片描述

接收到的数据只能输出到控制台的问题解决方法

这个问题困扰了我很久也一直百度但是没有找到任何的解决方法,在https://bbs.csdn.net/topics/392090474里有描述,可以复制一楼的代码运行试一试就知道了。主要问题是在于这个jar包的作者没有写出数据处理得方法,而该方法里的run里直接将信息给打印出来,不给一丝操作的机会。解决办法就是实现jar包里的SyslogServerSessionEventHandlerIF接口,然后去重写里面的event方法来达到的。该接口里提供了很多的方法,可以按照自己的需要去重写里面的方法来达到更好的效果。

具体代码

哔哔了这么久开始上代码
1.SyslogServerEventHandler类,为操作接收信息的类,继承SyslogServerSessionEventHandlerIF并重写event方法来达到。

public class SyslogServerEventHandler 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());
		//获取当前的源设备IP
		String sourceIP = getIPAddress(socketAddress.toString());
		//获取到信息主体
		String msg = event.getMessage();
		//放入信息
		setSyslog("{" + facility + "} " + date + " " + level + " " + event.getMessage()+ " " +sourceIP );
		try {
   
			//打印信息
			System.out.println(getSyslog());
		} catch (UnsupportedEncodingException e) {
   
			System.err.println("UnsupportedEncodingException");
		}
		
	}
	public String getSyslog(
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值