Change the structure of log messages. Add a new
[SXSI/xpathcomp.git] / src / logger.ml
index a206382..05fbc83 100644 (file)
@@ -3,9 +3,18 @@ open Format
 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 = [ "parsing";
+                "indexing";
+                "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
@@ -17,9 +26,33 @@ let deactivate s = Hashtbl.remove active_loggers s
 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 =
+  fprintf ppf fmt
+
+let _verbose = ref false
+let set_verbose b = _verbose := b
+let msg ppf fmt =
+  if !_verbose
+  then fprintf ppf fmt
+  else ifprintf ppf fmt
+
+let start_msg ppf s =
+  msg ppf "@[%s" s
+
+let end_msg ppf s =
+  msg ppf "@]%s@?" s
+
+let verbose a b = msg a b