日志采集小工具

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33222871/article/details/80662899

之前使用过logstash来采集log4j的消息,发现采集到的数据会出现乱序,但是logstash的资料网上很少,用起来着实麻烦,,,而我需要的功能也很简单


因此,我决定自己写一个日志采集工具


首先,为了解决乱序问题,这个问题也是一个世界性难题啊,各大消息中间件基本上都不能保证百分百有序,当然,我也做不到;

   我的解决方案是,因为我对实时性要求较低,所以我打算弄一个时延,,意思就是,当采集到一条日志(该日志带有发送时的时间戳)的时候,不急着输出,首先存入一个有序链表中,同时启动一个线程,定在指定时延后启动,功能是输出并清空有序链表中的所有数据;定时器只有当第一个结束后同时采集到了日志后才可以启动第二个。


其次,如何采集log4j日志,在此,我采用tcp的方式,由于log4j自带的socketAppender实在不好用,于是我自己写了一个Appender,参见我的另一篇博客扩展log4j appender发送tcp日志,只需要在日志产生方使用这个appender即可


最后,如何输出采集到的日志,采用全控制台输出,同时部分级别存入文件的方案,在此使用了另一个Appender,参见扩展log4j——自定义日志文件创建方式


该工具有好几个类,因此不提供源代码,只提供jar包下载,要看源码的可以直接反编译

下载地址:

使用方法:java -jar 4566 10 /home/log/log/{yyyy}/{MM}/{dd}-log.log DEBUG

    4566——监听的socket端口

    10——输出延迟时间,单位毫秒

    /home/log/log/{yyyy}/{MM}/{dd}-log.log   日志文件写入位置,yyyy为时间格式化写法,允许按时间分文件夹写入日志

    DEBUG 写入文件的日志级别,不高于该级别则写入文件


由于直接使用java命令会挂起进程,建议使用nohup命令,样例如下

nohup java -jar 4566 10 /home/log/log/{yyyy}/{MM}/{dd}-log.log DEBUG >> logserver.log &



猜你喜欢

转载自blog.csdn.net/qq_33222871/article/details/80662899