日志采集小工具

本文介绍了一种自制的日志采集工具,旨在解决日志采集过程中的乱序问题,并通过增加时延和使用有序链表来确保日志的相对有序性。此外,还涉及了自定义Log4j Appender用于TCP日志传输,以及日志输出至控制台和文件的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前使用过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 &



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值