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::logs
library to any desired targets insrc/*/CMakeLists.txt
:target_link_libraries(YourPackage_YourLibraryName # ... existing libraries, if any ... Findlib::logs)
Click your IDE's
Build
button
Not using DkSDK?
FIRST, do one or all of the following:
Run:
opam install logs.0.7.0+dune2
Edit your
dune-project
and add:(package (name YourExistingPackage) (depends ; ... existing dependenices ... (logs (>= 0.7.0+dune2))))
Then run:
dune build *.opam # if this fails, run: dune build
Edit your
<package>.opam
file 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
.
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 value Error
s
val
on_error : ``?src:
Logs.src
->
``?level:
Logs.level
->
``?header:string
->
``?tags:
Logs.Tag.set
->
``pp:``(
Stdlib.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](../../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
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
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 }