簡體   English   中英

同時監視多個日志文件

[英]monitor multiple log file simultaneously

我制作了一個程序,可以連續監視日志文件。 但是我不知道如何監視多個日志文件。 這是我監視單個文件所做的。 我應該在以下代碼中進行哪些更改,以便它也監視多個文件?

package com.read;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FileWatcherTest {

    public static void main(String args[]) {

        final File fileName = new File("D:/logs/myFile.log");

        // monitor a single file
        TimerTask fileWatcherTask = new FileWatcher(fileName) {

            long addFileLen = fileName.length();
            FileChannel channel;
            FileLock lock;
            String a = "";
            String b = "";

            @Override
            protected void onChange(File file) {

                RandomAccessFile access = null;
                try {
                    access = new RandomAccessFile(file, "rw");
                    channel = access.getChannel();
                    lock = channel.lock();
                    if (file.length() < addFileLen) {
                        access.seek(file.length());
                    } else {
                        access.seek(addFileLen);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                String line = null;
                try {

                    while ((line = access.readLine()) != null) {

                        System.out.println(line);

                    }

                    addFileLen = file.length();

                } catch (IOException ex) {
                    Logger.getLogger(FileWatcherTest.class.getName()).log(
                            Level.SEVERE, null, ex);
                }
                try {
                    lock.release();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } // Close the file

                try {
                    channel.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

        };

        Timer timer = new Timer();
        // repeat the check every second
        timer.schedule(fileWatcherTask, new Date(), 1000);
    }
}




package com.read;

import java.util.*;
import java.io.*;

public abstract class FileWatcher extends TimerTask {

    private long timeStamp;
    private File file;
    static String s;

    public FileWatcher(File file) {
        this.file = file;
        this.timeStamp = file.lastModified();
    }

    public final void run() {
        long timeStamp = file.lastModified();

        if (this.timeStamp != timeStamp) {
            this.timeStamp = timeStamp;

            onChange(file);
        }
    }

    protected abstract void onChange(File file);
}

您應該使用線程。 這是一個很好的教程:

http://docs.oracle.com/javase/tutorial/essential/concurrency/

您將執行以下操作:

public class FileWatcherTest {

    public static void main(String args[]) {
        (new Thread(new FileWatcherRunnable("first.log"))).start();
        (new Thread(new FileWatcherRunnable("second.log"))).start();
    }

    private static class FileWatcherRunnable implements Runnable {
        private String logFilePath;
        // you should inject the file path of the log file to watch
        public FileWatcherRunnable(String logFilePath) {
           this.logFilePath = logFilePath;
        }
        public void run() {
            // your code from main goes in here
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM