Reading lines in the text file which is growing and may be rotated, such as unix system log file.
Add this to your application's
dependencies: logreader: github: arcage/crystal-logreader
require "logreader" # create LogReader object log = LogReader.new("/var/log/maillog") # reads single line from the file # waits new line, when the file reaches EOF puts log.read_line # iterates each line in the file log.each do |line| puts line end
LogReader has only two public instance method
#each will not finish in normal operation. if you want to stop it, you have to do it forcibly by using
kill command etc.
When reading no data for reasons such as EOF,
LogReader try to read more data every second.
For every consecutive 5 results that no data read,
LogReader checks whether or not the inode number associated with the file name was changed.
If it had been changed,
LogReader close current file and re-open the file.