type log_tag = [ `Debug | `Error | `Message | `Warning ]
type log_callback = log_tag -> string -> unit
+(*
+colors=(black red green yellow blue magenta cyan gray white)
+ccodes=(30 31 32 33 34 35 36 37 39)
+*)
+
+let blue = "\e[0;34m"
+let yellow = "\e[0;33m"
+let green = "\e[0;32m"
+let red = "\e[0;31m"
+let black = "\e[0m"
+
let default_callback tag s =
- let prefix =
+ let prefix,ch =
match tag with
- | `Message -> "Info: "
- | `Warning -> "Warning: "
- | `Error -> "Error: "
- | `Debug -> "Debug: "
+ | `Message -> green ^ "Info: ", stdout
+ | `Warning -> yellow ^ "Warn: ", stderr
+ | `Error -> red ^ "Error: ", stderr
+ | `Debug -> blue ^ "Debug: ", stderr
in
- print_endline (prefix ^ s);
- flush stdout
+ output_string ch (prefix ^ black ^ s ^ "\n");
+ flush ch
let callback = ref default_callback
let set_log_callback f = callback := f
+let get_log_callback () = !callback
let message s = !callback `Message s
let warn s = !callback `Warning s