2010-04-09 6 views
0

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

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

я написал что-то подобное для окон, чтобы выполнить из 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

Errr ... '-f' переключатель означает«Следовать», любые изменения должны быть напечатаны на консоль автоматически (если файл не будет удален (или перемещены) и новый один с тем же именем создается, в котором в случае, если вам нужно будет выполнить следующее и начать снова (но вы не говорите, что вам нужно прекратить процесс). – Quentin

ответ

4

Использование -F вместо -f

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

-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. 
Смежные вопросы