package logs
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=86f4a02807eb1a297aae44977d9f61e419c31458a5d7b23c6f55575e8e69d5ca
md5=2bf021ca13331775e33cf34ab60246f7
doc/logs.lwt/Logs_lwt/index.html
Module Logs_lwt
Lwt
logging.
The log functions of this module return Lwt
threads that proceed only when the log operation is over, as defined by the current Logs.reporter
.
See a cooperative reporter example.
v0.7.0 - homepage
Log functions
The type for Lwt log functions. The returned thread only proceeds once the log operation is over. See Logs.log
.
val msg : ?src:Logs.src -> Logs.level -> 'a log
See Logs.msg
.
See Logs.debug
.
val kmsg :
(unit -> 'b Lwt.t) ->
?src:Logs.src ->
Logs.level ->
('a, 'b Lwt.t) Logs.msgf ->
'b Lwt.t
See Logs.kmsg
.
Logging result
value Error
s
val on_error :
?src:Logs.src ->
?level:Logs.level ->
?header:string ->
?tags:Logs.Tag.set ->
pp:(Format.formatter -> 'b -> unit) ->
use:('b -> 'a Lwt.t) ->
('a, 'b) result Lwt.t ->
'a Lwt.t
See Logs.on_error
.
val on_error_msg :
?src:Logs.src ->
?level:Logs.level ->
?header:string ->
?tags:Logs.Tag.set ->
use:(unit -> 'a Lwt.t) ->
('a, [ `Msg of string ]) result Lwt.t ->
'a Lwt.t
See Logs.on_error_msg
.
Source specific log functions
module type LOG = sig ... end
src_log src
is a set of logging functions for src
.
Cooperative reporter example
The following reporter will play nice with Lwt
's runtime, it will behave synchronously for the log functions of this module and asynchronously for those of the Logs
module (see Note on synchronous logging).
It reuses Reporter and will produce colorful output if the standard formatters are setup to do so. For example it can be used instead of Reporter in the full setup example.
let lwt_reporter () =
let buf_fmt ~like =
let b = Buffer.create 512 in
Fmt.with_buffer ~like b,
fun () -> let m = Buffer.contents b in Buffer.reset b; m
in
let app, app_flush = buf_fmt ~like:Fmt.stdout in
let dst, dst_flush = buf_fmt ~like:Fmt.stderr in
let reporter = Logs_fmt.reporter ~app ~dst () in
let report src level ~over k msgf =
let k () =
let write () = match level with
| Logs.App -> Lwt_io.write Lwt_io.stdout (app_flush ())
| _ -> Lwt_io.write Lwt_io.stderr (dst_flush ())
in
let unblock () = over (); Lwt.return_unit in
Lwt.finalize write unblock |> Lwt.ignore_result;
k ()
in
reporter.Logs.report src level ~over:(fun () -> ()) k msgf;
in
{ Logs.report = report }