如何在scala中读取不断更新的日志文件

时间:2014-08-14 06:34:19

标签: scala

我想在scala中读取一个不断更新的文件(tail -f),我不能使用其他工具,例如tail,因为我需要对记录进行一些额外的处理。

所以每次如何跟踪确切的文件内容。

2 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

您始终可以从Scala拨打tail -f,然后在那里进行额外处理。使用scala.sys.process API:

import scala.sys.process._

def someProcessing(line: String): Unit = {
  // do whatever you want with that line
  print("[just read this line] ")
  println(line)
}

// the file to read
val file = "mylogfile.txt"

// the process to start
val tail = Seq("tail", "-f", file)

// continuously read lines from tail -f
tail.lineStream.foreach(someProcessing) 
// careful: this never returns (unless tail is externally killed)

编辑:这样做的一个优点是不涉及任何轮询。但作为交换,这会以可能不可中断的方式阻止调用线程。