Java에서 로그 파일 모니터링을 구현하고 관련 데이터를 읽는 방법
프로젝트 요구 사항
데이터 센터 프로젝트 팀은 파일 및 폴더가 변경될 때 해당 비즈니스 프로세스를 수행하기 위해 폴더 또는 로그 파일을 모니터링하고 해당 형식의 더티 데이터를 읽는 요구 사항을 구현해야 하므로 여기에 기록합니다. 관련사업의 기술선정.
Apache Commons-IO
먼저 해당 종속성을 추가해야 합니다.
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.7</version> </dependency>
버전은 직접 선택할 수 있습니다. 버전 2.7 이상에는 Java 8
공식 웹사이트 스크린샷이 필요합니다.
Apache Commos IO org.apache.commons.io.monitor
패키지는 파일 시스템 모니터링 기능을 제공합니다. org.apache.commons.io.monitor
包提供了文件系统监听的功能。
核心知识
一句话总结:通过观察者模式以及事件监听机制,以
FileAlterationObserver
为核心,再通过FileAlterationListener
,FileAlterationMonitor
,就可以实现对文件系统的事件监听。整体流程:
自定义文件监听类并继承
FileAlterationListenerAdaptor
实现对文件与目录的创建,修改,删除事件的处理自定义文件监控类,通过指定目录创建一个观察者
FileAlterationObserver
向此监视器添加文件系统观察器,并添加文件监听器
通过
ApplicationRunner
或者CommandLineRunner
调用并执行
代码实现
文件监听类:
/** * 文件监听类 * @author Greenarrow * @date 2022-05-12 14:43 **/ public class FileListener extends FileAlterationListenerAdaptor { private static Logger logger = LoggerFactory.getLogger(FileListener.class); @Override public void onStart(FileAlterationObserver observer) { super.onStart(observer); logger.info("onStart"); } @Override public void onDirectoryCreate(File directory) { logger.info("[新建]:" + directory.getAbsolutePath()); } @Override public void onDirectoryChange(File directory) { logger.info("[修改]:" + directory.getAbsolutePath()); } @Override public void onDirectoryDelete(File directory) { logger.info("[删除]:" + directory.getAbsolutePath()); } @Override public void onFileCreate(File file) { String compressedPath = file.getAbsolutePath(); logger.info("[新建]:" + compressedPath); List<String> contentList = null; try { if (file.canRead()){ // 将文件按行读取为字符串集合 contentList = FileUtils.readLines(new File(compressedPath), StandardCharsets.UTF_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
- 🎜한 문장 요약: 관찰자 모드 및 이벤트 수신 메커니즘을 통해
FileAlterationObserver
를 핵심으로 한 다음FileAlterationListener
,FileAlterationMonitor
를 사용하면 파일 시스템의 이벤트 모니터링을 구현할 수 있습니다. 🎜🎜 - 🎜전체 프로세스: 🎜🎜🎜
- 🎜파일 수신 클래스를 사용자 정의하고
FileAlterationListenerAdaptor
를 상속하여 파일 및 디렉터리를 생성하고 처리합니다. 수정 및 삭제 이벤트🎜🎜 - 🎜사용자 정의 파일 모니터링 클래스,
FileAlterationObserver
🎜🎜 - 🎜이 모니터에 파일 시스템 관찰자를 추가하고 파일을 추가하여 관찰자를 생성합니다. 리스너 🎜🎜
- 🎜
ApplicationRunner
또는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(); } }
로그인 후 복사- 🎜파일 모니터링 클래스: 🎜🎜🎜rrreee
- 🎜Customize
CommandLineRunner
실행 및 구현:🎜🎜🎜rrreee
위 내용은 Java에서 로그 파일 모니터링을 구현하고 관련 데이터를 읽는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
- 🎜파일 모니터링 클래스: 🎜🎜🎜rrreee
- 🎜파일 모니터링 클래스: 🎜🎜🎜
- 🎜파일 수신 클래스를 사용자 정의하고

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

자바의 암스트롱 번호 안내 여기에서는 일부 코드와 함께 Java의 Armstrong 번호에 대한 소개를 논의합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다
