type t = string
type level = int
-let loggers = [ "top-down-run"; "top-down-approx"; "result-set"; "level2-jit"; "res-jit"; "grammar"; "twopass";"transition" ]
+let loggers = [ "top-down-run";
+ "top-down-approx";
+ "result-set";
+ "level2-jit";
+ "res-jit";
+ "twopass";
+ "transition";
+ "bottom-up" ]
let active_loggers : (t, int) Hashtbl.t = Hashtbl.create 17
-
+let margin = List.fold_left (fun m l -> max m (String.length l)) 0 loggers
let available () = loggers
let is_logger s = List.mem s loggers
let logger_output = ref err_formatter
let set_output f = logger_output := f
-let log t l s =
+let log t l fmt =
if l <= level t
then begin
- fprintf !logger_output "%s: " t;
- fprintf !logger_output "%s%!" s
+ pp_open_hovbox !logger_output (margin + 3);
+ fprintf !logger_output "%-.*s : " margin t;
+ kfprintf (fun _ ->
+ pp_close_box !logger_output ();
+ fprintf !logger_output "@?@\n";
+ ) !logger_output fmt
end
+ else
+ ifprintf !logger_output fmt
+
+let print ppf fmt =
+ pp_open_hovbox ppf 0;
+ kfprintf (fun _ ->
+ pp_close_box ppf ();
+ fprintf ppf "@?")
+ ppf fmt