java分析日志文件,java监听文件变化内容

  java分析日志文件,java监听文件变化内容

  

目录

项目需求Apache Commons-IO核心知识代码实现总结

 

  

项目需求

由于所在数据中台项目组需要实现监听文件夹或者日志文件并读取对应格式的脏数据的需求,以便在文件、文件夹发生变化时进行相应的业务流程;所以在这里记录下相关业务的实现及技术选型。

 

  

Apache Commons-IO

首先需要添加对应依赖:

 

  依赖关系groupId commons-io/groupId artifact id commons-io/artifact id版本2.7/版本/依赖关系版本可自行选择,这里需要注意的是 2.7 版本及以上需要 Java 8

  官网截图:

  阿帕奇通信超正析象管(Image Orthicon)中的org.apache.commons.io.monitor包提供了文件系统监听的功能。

  

核心知识

一句话总结:通过观察者模式以及事件监听机制,以FileAlterationObserver为核心,再通过FileAlterationListener,FileAlterationMonitor,就可以实现对文件系统的事件监听。整体流程:自定义文件监听类并继承FileAlterationListenerAdaptor实现对文件与目录的创建,修改,删除事件的处理自定义文件监控类,通过指定目录创建一个观察者FileAlterationObserver向此监视器添加文件系统观察器,并添加文件监听器通过应用程序运行器或者CommandLineRunner调用并执行

 

  

代码实现

文件监听类:/** * 文件监听类* @作者绿箭* @日期2022-05-12 14:43 * */公共类文件监听器扩展FileAlterationListenerAdaptor { private static Logger Logger=Logger factory。获取记录器(文件监听器。类);@ Override public void onStart(FileAlterationObserver observer){ super。onStart(观察者);伐木工。信息(“onStart”);} @在目录创建时覆盖公共void(文件目录){ logger.info([新建]: 目录。getabsolutepath());} @在目录更改时覆盖公共void(文件目录){ logger.info([修改]: 目录。getabsolutepath());} @在目录删除时覆盖公共void(文件目录){ logger.info([删除]: 目录。getabsolutepath());} @ Override public void onfile create(File File){ String compressed path=File。getabsolutepath();logger.info([新建]: 压缩路径);ListString contentList=null请尝试{ if (file.canRead()){ //将文件按行读取为字符串集合内容列表=文件效用。阅读行(新文件(压缩路径),标准字符集.世界时

 

  F_8); if (CollectionUtil.isNotEmpty(contentList)){ // 获取对应格式的数据并输出,这里可自行添加业务处理 List<String> dirtyRecord = contentList.stream().filter(s -> s.startsWith("{") && s.endsWith("}")).collect(Collectors.toList()); dirtyRecord.forEach(System.out::println); } } } catch (IOException e) { e.printStackTrace(); logger.error("读取文件内容失败",e); } } @Override public void onFileChange(File file) { String compressedPath = file.getAbsolutePath(); logger.info("[修改]:" + compressedPath); } @Override public void onFileDelete(File file) { logger.info("[删除]:" + file.getAbsolutePath()); } @Override public void onStop(FileAlterationObserver observer) { super.onStop(observer); logger.info("onStop"); }}文件监控类:

/** * 文件监听测试 demo * @author Greenarrow * @date 2022-05-12 14:45 **/public class FileMonitor { FileAlterationMonitor monitor = null; public FileMonitor(long interval) throws Exception { monitor = new FileAlterationMonitor(interval); } /** * 给文件添加监听 * @param path * @param listener */ public void monitor(String path, FileAlterationListener listener) { FileAlterationObserver observer = new FileAlterationObserver(new File(path)); monitor.addObserver(observer); observer.addListener(listener); } public void stop() throws Exception { monitor.stop(); } public void start() throws Exception { monitor.start(); }}

自定义 Runner 并实现 CommandLineRunner :

/** * 项目启动之后开启文件监听功能 * @author Greenarrow * @date 2022-05-12 10:02 **/@Component// @Order(Integer.MIN_VALUE)public class DirtyRecordRunner implements CommandLineRunner { private static Logger logger = LoggerFactory.getLogger(DirtyRecordRunner.class); @Value("${test}") private String path; @Override public void run(String... args) throws Exception { logger.info(this.getClass().getName()+"[开启文件夹监听功能]"); FileMonitor fileMonitor = new FileMonitor(1000); fileMonitor.monitor(path,new FileListener()); fileMonitor.start(); }}

 

  

总结

文件、文件夹监听功能较简单,实现方式可自行选择

 

  需要注意的是,通过 Runner 的方式在项目启动之后开启相关监听功能,此方式存在缺陷,只能调用一次,出现异常就会停止,除非项目重启,这里需要通过相关补偿机制来实现

  到此这篇关于Java实现日志文件监听并读取相关数据的方法实践的文章就介绍到这了,更多相关Java 日志文件监听读取内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: