logstash file input plugin implements by java
写程序有时候真的有点难,要考虑各种情况。
应用在运行中,会不断生成日志文件。假如要实现一个日志收集的工具,不考虑其它的分析功能,只考虑收集,有哪些方面要考虑的?
可能是这样的:zxc.log.1, zxc.log.2, zxc.log.3, zxc.log.4, zxc.log.5 循环输出;
可能是这样的:zxc.2016-1-1.log, zxc.2016-1-1.log, zxc.2016-6-6.log,每天生成一个日志文件;
可能是这样的:log.out,每次重启都会生成一个新的log.out,覆盖旧的文件。
- 提供正则或者globs方式的通配符。
- 要能判断文件是不是新建的。
- 如何判断文件有没有更新?
- 如何保存文件的读取进度?
- 如果我们在读取文件的过程中,文件被删除了会怎样?
- 如果我们在读取文件过程中,进程挂了,读取进度有没有及时保存?
- 在保存文件进度时,如果挂了,重启能不能正确恢复文件进度?
- 能不能保证读取的内容不重复?
- 如果日志文件很快生成,又很快删除了,是否能保证不漏掉?
- 如果日志文件是软链接(soft link),能不能正确处理?
- 文件系统的inode会被回收利用,能不能处理这个?
- 有没有控制读进内存的数据的大小,防止占用过多的内存?
- 利用inode来识别新文件;
- 区分了设备,文件名,文件的不同版本;
- 利用rename原子性地保存pos;
- 能否保证不重复,不丢失数据? 这个无法做到,除非是分布式事务,否则,总有可能丢失或者重复发送数据。任何日志收集软件或者消息队列软件都是如此
- 基于filewatch这个库实现;