src/Pure/General/logger.scala
changeset 75393 87ebf5a50283
parent 73777 52e43a93d51f
child 76592 ec8bf1268f45
equal deleted inserted replaced
75388:b3ca4a6ed74b 75393:87ebf5a50283
     5 */
     5 */
     6 
     6 
     7 package isabelle
     7 package isabelle
     8 
     8 
     9 
     9 
    10 object Logger
    10 object Logger {
    11 {
       
    12   def make(log_file: Option[Path]): Logger =
    11   def make(log_file: Option[Path]): Logger =
    13     log_file match { case Some(file) => new File_Logger(file) case None => No_Logger }
    12     log_file match { case Some(file) => new File_Logger(file) case None => No_Logger }
    14 
    13 
    15   def make(progress: Progress): Logger =
    14   def make(progress: Progress): Logger =
    16     new Logger { def apply(msg: => String): Unit = progress.echo(msg) }
    15     new Logger { def apply(msg: => String): Unit = progress.echo(msg) }
    17 }
    16 }
    18 
    17 
    19 trait Logger
    18 trait Logger {
    20 {
       
    21   def apply(msg: => String): Unit
    19   def apply(msg: => String): Unit
    22 
    20 
    23   def timeit[A](message: String = "", enabled: Boolean = true)(e: => A): A =
    21   def timeit[A](message: String = "", enabled: Boolean = true)(e: => A): A =
    24     Timing.timeit(message, enabled, apply(_))(e)
    22     Timing.timeit(message, enabled, apply(_))(e)
    25 }
    23 }
    26 
    24 
    27 object No_Logger extends Logger
    25 object No_Logger extends Logger {
    28 {
       
    29   def apply(msg: => String): Unit = {}
    26   def apply(msg: => String): Unit = {}
    30 }
    27 }
    31 
    28 
    32 class File_Logger(path: Path) extends Logger
    29 class File_Logger(path: Path) extends Logger {
    33 {
       
    34   def apply(msg: => String): Unit = synchronized { File.append(path, msg + "\n") }
    30   def apply(msg: => String): Unit = synchronized { File.append(path, msg + "\n") }
    35 
    31 
    36   override def toString: String = path.toString
    32   override def toString: String = path.toString
    37 }
    33 }