iLogtail 的文件采集场景是观察者模式的典型应用。为兼顾采集效率和跨平台支持,iLogtail 采用了轮询(polling)与事件(inotify)并存的模式。轮询模块由两个线程组成:DirFilePolling 负责根据用户配置定期遍历文件夹,将符合采集配置的文件加入 modify cache;ModifyPolling 定期扫描 modify cache 中的文件状态,对比 Dev、Inode、Modify Time、Size 等指标,发现更新则生成 modify event。inotify 模块属于事件监听方式,根据配置监听目录及子目录,当目录发生变化时内核产生通知事件。两个模块产生的 Create/Modify/Delete 事件分别存入各自的 Event Queue,最终合并成统一的 Event Queue。LogInput 模块作为观察者消费这个统一的 Event Queue,交由 Event Handler 处理各类事件并进行实际的日志采集,实现了一对多的依赖关系和松耦合。




