Module Logs_lwt
Contents
Instructions: Use this module in your project
In the IDE (CLion, Visual Studio Code, Xcode, etc.) you use for your DkSDK project:
Add the following to your project's
dependencies/CMakeLists.txt:DkSDKProject_DeclareAvailable(logs CONSTRAINT "= 0.7.0+dune2" FINDLIBS logs logs.cli logs.fmt logs.lwt logs.threaded logs.top) DkSDKProject_MakeAvailable(logs)Add the
Findlib::logslibrary to any desired targets insrc/*/CMakeLists.txt:target_link_libraries(YourPackage_YourLibraryName # ... existing libraries, if any ... Findlib::logs)Click your IDE's
Buildbutton
Not using DkSDK?
FIRST, do one or all of the following:
Run:
opam install logs.0.7.0+dune2Edit your
dune-projectand add:(package (name YourExistingPackage) (depends ; ... existing dependenices ... (logs (>= 0.7.0+dune2))))Then run:
dune build *.opam # if this fails, run: dune buildEdit your
<package>.opamfile and add:depends: [ # ... existing dependencies ... "logs" {>= "0.7.0+dune2"} ]Then run:
opam install . --deps-only
FINALLY, add the logs.lwt library to any desired (library)and/or (executable) targets in your **/dune files:
(library
(name YourLibrary)
; ... existing library options ...
(libraries
; ... existing libraries ...
logs.lwt))
(executable
(name YourExecutable)
; ... existing executable options ...
(libraries
; ... existing libraries ...
logs.lwt))Log functions
The type for Lwt log functions. The returned thread only proceeds once
the log operation is over. See Logs.log.
valmsg : ``?src:Logs.src->Logs.level->'alog
See Logs.msg.
See Logs.debug.
valkmsg : ``(``unit->'bLwt.t)``->``?src:Logs.src->Logs.level->``('a,'bLwt.t)``Logs.msgf->'bLwt.t
See Logs.kmsg.
Logging value Errors
valon_error : ``?src:Logs.src->``?level:Logs.level->``?header:string->``?tags:Logs.Tag.set->``pp:``(Stdlib.Format.formatter->'b->unit)``->``use:``('b->'aLwt.t)``->``('a,'b)``resultLwt.t->'aLwt.t
See Logs.on_error.
valon_error_msg : ``?src:Logs.src->``?level:Logs.level->``?header:string->``?tags:Logs.Tag.set->``use:``(``unit->'aLwt.t)``->``('a, ``[ ```Msg of string ``` ])[result](../../ocaml/Stdlib/#type-result)[Lwt.t](../../lwt/Lwt/#type-t)`->'a[Lwt.t\](../lwt/Lwt.html#type-t)
See Logs.on_error_msg.
Source specific log functions
moduletypeLOG=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
sync).
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 }