ホームページ > Java > &#&チュートリアル > Java でログ ファイルの監視を実装し、関連データを読み取る方法

Java でログ ファイルの監視を実装し、関連データを読み取る方法

王林
リリース: 2023-04-24 18:25:22
転載
2303 人が閲覧しました

プロジェクト要件

データセンター プロジェクト チームは、ファイルやフォルダーが変更されたときに対応するビジネスを実行できるように、フォルダーまたはログ ファイルを監視し、ダーティ データを対応する形式で読み取る必要性を実装する必要があるためです。プロセス; 関連するビジネスの実装とテクノロジーの選択がここに記録されます。

Apache Commons-IO

まず、対応する依存関係を追加する必要があります:

<dependency>
 <groupId>commons-io</groupId>
 <artifactId>commons-io</artifactId>
 <version>2.7</version>
</dependency>
ログイン後にコピー

バージョンは自分で選択できます。ここでそのバージョンに注意してください。 2.7 以降には Java 8 が必要です

## 公式 Web サイトのスクリーンショット:

Java でログ ファイルの監視を実装し、関連データを読み取る方法

##org.apache.commons.io.monitor

パッケージApache Commos IOはファイルシステム監視機能を提供します。

##コア知識Java でログ ファイルの監視を実装し、関連データを読み取る方法

一文で要約: オブザーバー パターンとイベント リスニング メカニズムを通じて、
    FileAlterationObserver
  • としてコアでは、

    FileAlterationListenerFileAlterationMonitor を通じて、ファイル システムのイベント監視を実現できます。

    全体プロセス:
ファイル リスニング クラスをカスタマイズし、
    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
    :
  • /**
     * 项目启动之后开启文件监听功能
     * @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();
        }
    }
    ログイン後にコピー
    を実装します。

    以上がJava でログ ファイルの監視を実装し、関連データを読み取る方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート