Как указано kotarak , вы можете использовать RandomAccessFile для поиска конца файла. К сожалению, вы должны быть заняты - ждать / спать для изменений.
Используя ленивую последовательность, вы можете обрабатывать строки «на лету»:
(import java.io.RandomAccessFile)
(defn raf-seq
[#^RandomAccessFile raf]
(if-let [line (.readLine raf)]
(lazy-seq (cons line (raf-seq raf)))
(do (Thread/sleep 1000)
(recur raf))))
(defn tail-seq [input]
(let [raf (RandomAccessFile. input "r")]
(.seek raf (.length raf))
(raf-seq raf)))
; Read the next 10 lines
(take 10 (tail-seq "/var/log/mail.log"))
Обновление:
Что-то вроде tail -f /var/log/mail.log -n 0 , с использованием дозыq , поэтому изменения фактически потребляются.
(doseq [line (tail-seq "/var/log/mail.log")] (println line))