Rumah > Java > javaTutorial > Bagaimana untuk melaksanakan pemantauan fail log dan membaca data berkaitan dalam Java

Bagaimana untuk melaksanakan pemantauan fail log dan membaca data berkaitan dalam Java

王林
Lepaskan: 2023-04-24 18:25:22
ke hadapan
2306 orang telah melayarinya

Keperluan Projek

Oleh kerana pasukan projek pusat data perlu melaksanakan keperluan memantau folder atau fail log dan membaca data kotor dalam format yang sepadan, untuk menjalankan perniagaan yang sepadan apabila fail dan folder berubah. jadi pelaksanaan pemilihan perniagaan dan teknologi yang berkaitan direkodkan di sini.

Apache Commons-IO

Mula-mula anda perlu menambah kebergantungan yang sepadan:

<dependency>
 <groupId>commons-io</groupId>
 <artifactId>commons-io</artifactId>
 <version>2.7</version>
</dependency>
Salin selepas log masuk

Versi ini boleh dipilih sendiri versi 2.7 dan ke atas memerlukan Java 8

Tangkapan skrin tapak web rasmi:

Bagaimana untuk melaksanakan pemantauan fail log dan membaca data berkaitan dalam Java

Pakej org.apache.commons.io.monitor dalam Apache Commos IO menyediakan pemantauan sistem fail fungsi.

Bagaimana untuk melaksanakan pemantauan fail log dan membaca data berkaitan dalam Java

Pengetahuan teras

  • Ringkasan dalam satu ayat: Melalui mod pemerhati dan mekanisme pemantauan acara, dengan FileAlterationObserver sebagai teras , Melalui FileAlterationListener, FileAlterationMonitor, pemantauan acara sistem fail boleh dicapai.

  • Proses keseluruhan:

  • Sesuaikan kelas pemantauan fail dan warisi FileAlterationListenerAdaptor untuk mencipta fail dan direktori, memproses peristiwa pengubahsuaian dan pemadaman

  • Kelas pemantauan fail tersuai, buat pemerhati dengan menyatakan direktori FileAlterationObserver

  • untuk memantau ini Tambah fail pemerhati sistem dan tambahkan pendengar fail

  • melalui ApplicationRunner atau CommandLineRunner untuk memanggil dan melaksanakan

pelaksanaan kod

  • Kelas pemantauan fail:

/**
 * 文件监听类
 * @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");
    }
}
Salin selepas log masuk
  • Kelas pemantauan fail:

/**
 * 文件监听测试 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();

    }
}
Salin selepas log masuk
  • Sesuaikan Pelari dan laksanakan 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();
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pemantauan fail log dan membaca data berkaitan dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan