IBase.Logging
log messages at different levels of verbosity
include module type of Die
This can be used to avoid scattering exit invocations all over the codebase
kind of error for die
, with similar semantics as Logging.{external,internal,user}_error
val die :
error ->
('a, Stdlib.Format.formatter, unit, _) IStdlib.IStd.format4 ->
'a
Raise the corresponding exception.
val raise_error :
?backtrace:IStdlib.IStd.Caml.Printexc.raw_backtrace ->
error ->
msg:string ->
'a
val term_styles_of_style : style -> IStdlib.IStd.ANSITerminal.style list
val environment_info : ('a, F.formatter, unit) IStdlib.IStd.format -> 'a
log information about the environment
val progress : ('a, F.formatter, unit) IStdlib.IStd.format -> 'a
print immediately to standard error unless --quiet is specified
val log_task : ('a, F.formatter, unit) IStdlib.IStd.format -> 'a
log progress in the log file and on the console unless there is an active task bar
task_progress ~f pp x
executes f
and log progress pp x
in the log file and also on the console unless there is an active task bar
val result :
?style:IStdlib.IStd.ANSITerminal.style list ->
('a, F.formatter, unit) IStdlib.IStd.format ->
'a
Emit a result to stdout. Use only if the output format is stable and useful enough that it may conceivably get piped to another program, ie, almost never (use progress
instead otherwise).
val user_error : ('a, F.formatter, unit) IStdlib.IStd.format -> 'a
bad input, etc. detected
val user_warning : ('a, F.formatter, unit) IStdlib.IStd.format -> 'a
the user may have done something wrong
val internal_error : ('a, F.formatter, unit) IStdlib.IStd.format -> 'a
huho, infer has a bug
val external_error : ('a, F.formatter, unit) IStdlib.IStd.format -> 'a
some other tool has a bug or is called wrongly
val external_warning : ('a, F.formatter, unit) IStdlib.IStd.format -> 'a
Level of verbosity for debug output. Each level enables all the levels before it.
val debug :
debug_kind ->
debug_level ->
('a, F.formatter, unit) IStdlib.IStd.format ->
'a
log debug info
val debug_dev : ('a, Stdlib.Format.formatter, unit) IStdlib.IStd.format -> 'a
For debugging during development.
val ocaml_pos_to_string : ocaml_pos -> string
Convert an ocaml position to a string
val pp_ocaml_pos_opt : F.formatter -> ocaml_pos option -> unit
Pretty print a position in ocaml source
log management
Set up logging to go to the log file. Call this once the results directory has been set up.
Flushes the formatters used for logging. Call this in the parent before you fork(2).
Reset the formatters used for logging. Call this in the child after you fork(2).
Delayed printing (HTML debug, ...)
val d_pp_with_pe :
?color:IStdlib.Pp.color ->
(IStdlib.Pp.env -> F.formatter -> 'a -> unit) ->
'a ->
unit
val get_and_reset_delayed_prints : unit -> delayed_prints
return the delayed print actions and reset them
val set_delayed_prints : delayed_prints -> unit
set the delayed print actions
val d_str : ?color:IStdlib.Pp.color -> string -> unit
dump a string
val d_strln : ?color:IStdlib.Pp.color -> string -> unit
dump a string plus newline
val d_printf :
?color:IStdlib.Pp.color ->
('a, F.formatter, unit) IStdlib.IStd.format ->
'a
val d_printfln :
?color:IStdlib.Pp.color ->
('a, F.formatter, unit) IStdlib.IStd.format ->
'a
val d_printfln_escaped :
?color:IStdlib.Pp.color ->
('a, F.formatter, unit) IStdlib.IStd.format ->
'a
dump command to increase the indentation level. NOTE: most likely, you need d_with_indent
instead
dump command to decrease the indentation level NOTE: most likely, you need d_with_indent
instead.
val with_indent :
?name_color:IStdlib.Pp.color ->
?collapsible:bool ->
?escape_result:bool ->
?pp_result:(F.formatter -> 'a -> unit) ->
f:(unit -> 'a) ->
('b, F.formatter, unit, 'a) IStdlib.IStd.format4 ->
'b
Unconditionally execute f
so that all logs written inside (if any) are written with indentation, using the title format provided.
pp_result
, if provided, will make the result of a call to be printed as well (useful for cases when there are several places when the function returns).
NOTE: If you want to use it NOT at the very top level of a function, it is a code smell, and you probably want to split your function into smaller ones.