Warning: Reason support is experimental. We are looking for beta-tester and contributors.

Module Lwt_log

module Lwt_log : sig..end

Logging functions

This module provides logging functions. It is actually a thin extension of Lwt_log_core, adding logging destinations that are only available on Unix and Windows (such as files, standard output, and the system log). Being a thin extension, most of the functions in this module are actually the ones in Lwt_log_core. They are not repeated on this page, however, so please read both Lwt_log_core and this page for a complete understanding.

Here is a simple, self-contained usage example:

let () =
  Lwt_log.default :=
    Lwt_log.channel
      ~template:"$(date).$(milliseconds) [$(level)] $(message)"
      ~close_mode:`Keep
      ~channel:Lwt_io.stdout
      ();

  Lwt_log.add_rule "*" Lwt_log.Info;

  Lwt_main.run begin
    Lwt_log.info "Hello world!"
  end

(* ocamlfind opt -linkpkg -package lwt.unix log_example.ml && ./a.out *)

As an alternative to this module, we suggest trying Logs_lwt from the logs library.


include Lwt_log_core
val render : 
  buffer:Buffer.t ->
  template:template ->
  section:section -> level:level -> message:string -> unit

Same as Lwt_log_core.​render, except that the template may also contain the following variables:

  • date, which will be replaced with the current local date and time,
  • milliseconds, which will be replaced by the fractional part of the current Unix time, to millisecond accuracy.

For example:

  • "$(date) $(name)[$(pid)]: $(message)"
  • "$(date).$(milliseconds) $(name)[$(pid)]: $(message)"
  • "$(date): $(loc-file): $(loc-line): $(loc-column): $(message)"
type syslog_facility = 
  [ `Auth
  | `Authpriv
  | `Console
  | `Cron
  | `Daemon
  | `FTP
  | `Kernel
  | `LPR
  | `Local0
  | `Local1
  | `Local2
  | `Local3
  | `Local4
  | `Local5
  | `Local6
  | `Local7
  | `Mail
  | `NTP
  | `News
  | `Security
  | `Syslog
  | `UUCP
  | `User ]

Syslog facility. Look at the SYSLOG(3) man page for a description of syslog facilities

val syslog : 
  ?template:template ->
  ?paths:string list ->
  facility:syslog_facility -> unit -> logger

syslog ?template ?paths ~facility () creates an logger which send message to the system logger.

template : defaults to "$(date) $(name)[$(pid)]: $(section): $(message)"

paths : is a list of path to try for the syslogd socket. It default to ["/dev/log"; "/var/run/log"].

val file : 
  ?template:template ->
  ?mode:[ `Append | `Truncate ] ->
  ?perm:Unix.file_perm -> file_name:string -> unit -> logger Lwt.t

desf_file ?template ?mode ?perm ~file_name () creates an logger which will write messages to file_name.

  • if mode = `Truncate then the file is truncated and previous contents will be lost.
  • if mode = `Append, new messages will be appended at the end of the file

template : defaults to "$(date): $(section): $(message)"

mode : defaults to `Append

val channel : 
  ?template:template ->
  close_mode:[ `Close | `Keep ] ->
  channel:Lwt_io.output_channel -> unit -> logger

channel ?template ~close_mode ~channel () creates a logger from a channel.

If close_mode = `Close then channel is closed when the logger is closed, otherwise it is left open.

template : defaults to "$(name): $(section): $(message)"