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:

  1. Add the following to your project's dependencies/CMakeLists.txt:

    Copy
    DkSDKProject_DeclareAvailable(logs
        CONSTRAINT "= 0.7.0+dune2"
        FINDLIBS logs logs.cli logs.fmt logs.lwt logs.threaded logs.top)
    DkSDKProject_MakeAvailable(logs)
  2. Add the Findlib::logs library to any desired targets in src/*/CMakeLists.txt:

    Copy
    target_link_libraries(YourPackage_YourLibraryName
         # ... existing libraries, if any ...
         Findlib::logs)
  3. Click your IDE's Build button

Not using DkSDK?

FIRST, do one or all of the following:

  1. Run:

    Copy
    opam install logs.0.7.0+dune2
  2. Edit your dune-project and add:

    Copy
    (package
      (name YourExistingPackage)
      (depends
      ; ... existing dependenices ...
      (logs (>= 0.7.0+dune2))))

    Then run:

    Copy
    dune build *.opam # if this fails, run: dune build
  3. Edit your <package>.opam file and add:

    Copy
    depends: [
      # ... existing dependencies ...
      "logs" {>= "0.7.0+dune2"}
    ]

    Then run:

    Copy
    opam install . --deps-only

FINALLY, add the logs.cli library to any desired (library)and/or (executable) targets in your **/dune files:

Copy
(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.leveloption``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 is Some Logs.Info and more than once Some Logs.Debug.
  • --verbosity=LEVEL, the value of the term is l where l depends on on LEVEL. Takes over the option -v.
  • -q or --quiet, the value of the term is None. 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 ttys. The command line interface provides options to control the use of colors and the log reporting level.

Copy
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 ()