Module Logs_cli
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.cli
library to any desired (library)
and/or (executable)
targets in your **/dune
files:
(library
(name YourLibrary)
; ... existing library options ...
(libraries
; ... existing libraries ...
logs.cli))
(executable
(name YourExecutable)
; ... existing executable options ...
(libraries
; ... existing libraries ...
logs.cli))
Options for setting the report level
val
level : ``?env:
Cmdliner.Arg.env
->
``?docs:string
->
``unit
->
Logs.level
option``
Cmdliner.Term.t
level ?env ?docs ()
is a term for three
Cmdliner
options that can be used with
Logs.set_level
. The options are documented
under docs
(defaults to the default of
Cmdliner.Arg.info
).
The options work as follows:
-v
or--verbose
, if it appears once, the value of the term is isSome Logs.Info
and more than onceSome Logs.Debug
.--verbosity=LEVEL
, the value of the term isl
wherel
depends on onLEVEL
. Takes over the option-v
.-q
or--quiet
, the value of the term isNone
. Takes over the-v
and--verbosity
options.- If both options are absent the default value is
Some Logs.warning
If env
is provided, the default value in case all options are absent
can be overridden by the corresponding environment variable.
Example
The following example shows how to setup Logs
and
Fmt
so that logging is performed on standard
outputs with ANSI coloring if these are tty
s. The command line
interface provides options to control the use of colors and the log
reporting level.
let hello () = Logs.app (fun m -> m "Hello horrible world!")
let setup_log style_renderer level =
Fmt_tty.setup_std_outputs ?style_renderer ();
Logs.set_level level;
Logs.set_reporter (Logs_fmt.reporter ());
()
(* Command line interface *)
open Cmdliner
let setup_log =
Term.(const setup_log $ Fmt_cli.style_renderer () $ Logs_cli.level ())
let main () =
match Term.(eval (const hello $ setup_log, Term.info "tool")) with
| `Error _ -> exit 1
| _ -> exit (if Logs.err_count () > 0 then 1 else 0)
let () = main ()