From: MarcusG Date: Wed, 7 Oct 2009 16:12:49 +0000 (+0100) Subject: CP-706: transport the whole audit record line from slave to master X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=f0278d1e7954471187d465955829e0e6c7dbb3fd;p=xcp%2Fxen-api-libs.git CP-706: transport the whole audit record line from slave to master Signed-off-by: MarcusG --- diff --git a/log/log.ml b/log/log.ml index 5938ed3..655e490 100644 --- a/log/log.ml +++ b/log/log.ml @@ -214,7 +214,8 @@ let gettimestring () = let filesize = ref 0 let mutex = Mutex.create () -let output t ?(key="") ?(extra="") priority (message: string) = +let output_common t ?(raw=false) ?(key="") ?(extra="") priority (message: string) = + let result_string = ref "" in let construct_string withtime = (*let key = if key = "" then [] else [ key ] in let extra = if extra = "" then [] else [ extra ] in @@ -223,8 +224,14 @@ let output t ?(key="") ?(extra="") priority (message: string) = @ [ sprintf "%5s" (string_of_level priority) ] @ extra @ key @ [ message ] in (* let items = !extra_hook items in*) String.concat " " items*) + result_string := ( + if raw + then Printf.sprintf "%s" message + else Printf.sprintf "[%s%.5s|%s] %s" (if withtime then gettimestring () else "") (string_of_level priority) extra message + ); + !result_string in (* Keep track of how much we write out to streams, so that we can *) (* log-rotate at appropriate times *) @@ -236,7 +243,7 @@ let output t ?(key="") ?(extra="") priority (message: string) = in if String.length message > 0 then - match t.output with + (match t.output with | Syslog k -> let sys_prio = match priority with | Debug -> Syslog.Debug @@ -251,6 +258,14 @@ let output t ?(key="") ?(extra="") priority (message: string) = | None -> ()) | Nil -> () | String s -> (s := (construct_string true)::!s) + ); + !result_string + +let output t ?(key="") ?(extra="") priority (message: string) = + ignore(output_common t ~key ~extra priority message) + +let output_and_return t ?(raw=false) ?(key="") ?(extra="") priority (message: string) = + output_common t ~raw ~key ~extra priority message let log t level (fmt: ('a, unit, string, unit) format4): 'a = let b = (int_of_level t.level) <= (int_of_level level) in diff --git a/log/log.mli b/log/log.mli index 5658799..607b7b5 100644 --- a/log/log.mli +++ b/log/log.mli @@ -48,6 +48,7 @@ val gettimestring : unit -> string val filesize : int ref val mutex : Mutex.t val output : t -> ?key:string -> ?extra:string -> level -> string -> unit +val output_and_return : t -> ?raw:bool -> ?key:string -> ?extra:string -> level -> string -> string val log : t -> level -> ('a, unit, string, unit) format4 -> 'a val debug : t -> ('a, unit, string, unit) format4 -> 'a val info : t -> ('a, unit, string, unit) format4 -> 'a diff --git a/log/logs.ml b/log/logs.ml index 12555fc..94a8a38 100644 --- a/log/logs.ml +++ b/log/logs.ml @@ -158,7 +158,7 @@ let reset_all logger = (** log a fmt message to the key|level logger specified in the log mapping. * if the logger doesn't exist, assume nil logger. *) -let log key level ?(extra="") (fmt: ('a, unit, string, unit) format4): 'a = +let log_common key level ?(extra="") ~ret_fn1 ~ret_fn2 (fmt: ('a, unit, string, 'b) format4): 'a = let keylog = if Hashtbl.mem __log_mapping key then let keylog = Hashtbl.find __log_mapping key in @@ -171,18 +171,32 @@ let log key level ?(extra="") (fmt: ('a, unit, string, unit) format4): 'a = __default_logger in let loggers = get_by_level keylog level in match loggers with - | [] -> Printf.kprintf ignore fmt + | [] -> Printf.kprintf ret_fn1 fmt | _ -> let l = List.fold_left (fun acc logger -> try get_or_open logger :: acc with _ -> acc ) [] loggers in let l = List.rev l in + ret_fn2 l + +let log key level ?(extra="") (fmt: ('a, unit, string, unit) format4): 'a = + log_common key level ~extra ~ret_fn1:(ignore) fmt + ~ret_fn2:(fun l -> + (* ksprintf is the preferred name for kprintf, but the former + * is not available in OCaml 3.08.3 *) + Printf.kprintf (fun s -> + List.iter (fun t -> Log.output t ~key ~extra level s) l) fmt + ) + +let log_and_return key level ?(raw=false) ?(extra="") (fmt: ('a, unit, string, string) format4): 'a = + log_common key level ~extra ~ret_fn1:(fun s->s) fmt + ~ret_fn2:(fun l -> + let ret_str = ref "" in + Printf.kprintf (fun s -> + List.iter (fun t -> ret_str := Log.output_and_return t ~raw ~key ~extra level s) l; !ret_str) fmt + ) - (* ksprintf is the preferred name for kprintf, but the former - * is not available in OCaml 3.08.3 *) - Printf.kprintf (fun s -> - List.iter (fun t -> Log.output t ~key ~extra level s) l) fmt (* define some convenience functions *) let debug t ?extra (fmt: ('a , unit, string, unit) format4) = @@ -193,3 +207,5 @@ let warn t ?extra (fmt: ('a , unit, string, unit) format4) = log t Log.Warn ?extra fmt let error t ?extra (fmt: ('a , unit, string, unit) format4) = log t Log.Error ?extra fmt +let audit t ?raw ?extra (fmt: ('a , unit, string, string) format4) = + log_and_return t Log.Debug ?raw ?extra fmt