Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Most efficient way to tail/poll a log file in Java [duplicate]

There are many approaches, one could use create a Program and just call the Unix tail command, however the problem with this is that the process must be installed on a Unix machine with tail installed.

The other option is to just read the file, line by line until there are no more lines, sleep for a period of time and then try to read the next line and repeat.

The question is what/how do I go about polling a file which is actively being written to. AFAIK there is no way in Java to get async notifications when a file has been modified as this is too low level (something that comes from the OS). I am also aware of no libs which support this.

I was thinking a better approach may be to sleep/poll on the modified date of a file..?

Any solutions?

like image 702
NightWolf Avatar asked Jan 16 '23 23:01

NightWolf


1 Answers

If you can use Java 7 there are File Watchers and you could implement what you need.
File Notifications

For Java 6 (and previous) you would have to use Apache Commons VFS (File Monitor) lib to create your own file watcher.

If you can't go to Java 7 or use third party libs (e.g commons or jnotify) you would have to write a file watchdog your self using polling threads.

like image 119
Cratylus Avatar answered Jan 20 '23 14:01

Cratylus