как создать скрипт для логов - PullRequest
0 голосов
/ 09 апреля 2010

В настоящее время я наблюдаю за своими файлами журналов, такими как tail -f, и время от времени я нажимаю клавишу вверх и нажимаю клавишу возврата, чтобы в консоль выводились новые изменения при печати журнала, как заставить его печатать себя при изменении файла журнала? Вот требование:

START loop
1. Check file.log
2. If file.log has changed print the changes
3. else print nothing
END

Я написал что-то похожее для Windows, чтобы выполнить из Java:

import java.io.FileInputStream;
import java.io.DataInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

class LogWatch {
    public static void main(String args[]) {
        try {

            FileInputStream fstream = new FileInputStream("C:\\file.log");

            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String line;

            while (true) {

                line = br.readLine();
                if (line == null) {
                    Thread.sleep(500);
                } else {
                    System.out.println(line);
                }

            }

        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
    }
}

Какие ненужные накладные расходы, потому что это может быть сделано из сценария оболочки, есть ли у кого-нибудь какие-либо предложения, как это сделать?

1 Ответ

4 голосов
/ 09 апреля 2010

Используйте -F вместо -f

Предполагается, что -f не работает, потому что вы нажимаете logrotate и не упоминаете о необходимости убить предыдущий экземпляр tail.

 -f      The -f option causes tail to not stop when end of file is
         reached, but rather to wait for additional data to be appended to
         the input.  The -f option is ignored if the standard input is a
         pipe, but not if it is a FIFO.

 -F      The -F option implies the -f option, but tail will also check to
         see if the file being followed has been renamed or rotated.  The
         file is closed and reopened when tail detects that the filename
         being read from has a new inode number.  The -F option is ignored
         if reading from standard input rather than a file.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...