| author | wenzelm | 
| Sat, 11 Feb 2023 23:02:51 +0100 | |
| changeset 77255 | b810e99b5afb | 
| parent 77182 | 25dbf5bec91e | 
| child 77286 | 6435b0fd48b5 | 
| permissions | -rw-r--r-- | 
| 64606 | 1  | 
/* Title: Pure/General/logger.scala  | 
| 64605 | 2  | 
Author: Makarius  | 
3  | 
||
4  | 
Minimal logging support.  | 
|
5  | 
*/  | 
|
6  | 
||
| 64606 | 7  | 
package isabelle  | 
| 64605 | 8  | 
|
9  | 
||
| 75393 | 10  | 
object Logger {
 | 
| 64605 | 11  | 
def make(log_file: Option[Path]): Logger =  | 
12  | 
    log_file match { case Some(file) => new File_Logger(file) case None => No_Logger }
 | 
|
| 
73777
 
52e43a93d51f
clarified system_log: make this work independently of the particular "isabelle build" command-line (e.g. "isabelle mirabelle");
 
wenzelm 
parents: 
73340 
diff
changeset
 | 
13  | 
|
| 
 
52e43a93d51f
clarified system_log: make this work independently of the particular "isabelle build" command-line (e.g. "isabelle mirabelle");
 
wenzelm 
parents: 
73340 
diff
changeset
 | 
14  | 
def make(progress: Progress): Logger =  | 
| 
 
52e43a93d51f
clarified system_log: make this work independently of the particular "isabelle build" command-line (e.g. "isabelle mirabelle");
 
wenzelm 
parents: 
73340 
diff
changeset
 | 
15  | 
    new Logger { def apply(msg: => String): Unit = progress.echo(msg) }
 | 
| 64605 | 16  | 
}  | 
17  | 
||
| 75393 | 18  | 
trait Logger {
 | 
| 64605 | 19  | 
def apply(msg: => String): Unit  | 
| 65921 | 20  | 
|
| 
76593
 
badb5264f7b9
clarified signature: just one level of arguments to avoid type-inference problems;
 
wenzelm 
parents: 
76592 
diff
changeset
 | 
21  | 
def timeit[A](body: => A,  | 
| 76592 | 22  | 
message: Exn.Result[A] => String = null,  | 
23  | 
enabled: Boolean = true  | 
|
| 
76593
 
badb5264f7b9
clarified signature: just one level of arguments to avoid type-inference problems;
 
wenzelm 
parents: 
76592 
diff
changeset
 | 
24  | 
): A = Timing.timeit(body, message = message, enabled = enabled, output = apply(_))  | 
| 64605 | 25  | 
}  | 
26  | 
||
| 75393 | 27  | 
object No_Logger extends Logger {
 | 
| 73340 | 28  | 
  def apply(msg: => String): Unit = {}
 | 
| 64605 | 29  | 
}  | 
30  | 
||
| 75393 | 31  | 
class File_Logger(path: Path) extends Logger {
 | 
| 73340 | 32  | 
  def apply(msg: => String): Unit = synchronized { File.append(path, msg + "\n") }
 | 
| 64605 | 33  | 
|
34  | 
override def toString: String = path.toString  | 
|
35  | 
}  | 
|
| 77182 | 36  | 
|
37  | 
class System_Logger extends Logger {
 | 
|
38  | 
def apply(msg: => String): Unit =  | 
|
39  | 
if (Platform.is_windows) System.out.println(msg)  | 
|
40  | 
else System.console.writer.println(msg)  | 
|
41  | 
}  |