(* $Id: netplex_log.mli 1405 2010-02-12 01:02:27Z gerd $ *) (** Loggers *) (** A logger is usually configured in the config file. The [logging] section is inside [controller], e.g. {[ netplex { ... controller { ... logging { ... }; ... } ... } ]} The possible types of [logging] sections are explained below. If there are several [logging] sections, the messages are sent to all configured loggers. Instead of configuring loggers in the config file, one can also create loggers from config objects like [generic_config]. See also {!Netplex_intro.logging} for more documentation. *) open Netplex_types class type generic_config = object method log_format : string method log_component : string method log_subchannel : string method log_max_level : level end val channel_logger : out_channel -> logger (** Outputs messages to the channel *) val channel_logger_from_obj : generic_config -> out_channel -> logger (** Outputs messages to the channel *) val stderr_logger_factory : logger_factory (** Reads a logging section like * * {[ logging { * type = "stderr"; * format = "<format string>"; * component = "<name_of_component>"; * subchannel = "<name_of_subchannel>"; * max_level = "<max_level>"; * } * ]} * * - [format]: Optional format string. See below. * - [component]: Optional component selector. See below. * - [subchannel]: Optional subchannel selector. See below. * - [max_level]: Optional maximum log level. See below. *) val file_logger : string -> logger (** Writes messages to this file *) val file_logger_from_obj : generic_config -> string -> logger (** Writes messages to this file *) val file_logger_factory : logger_factory (** Reads a logging section like * * {[ logging { * type = "file"; * file = "/path/to/logfile"; * format = "<format string>"; * component = "<name_of_component>"; * subchannel = "<name_of_subchannel>"; * max_level = "<max_level>"; * } * ]} * * - [file]: Log messages are appended to this file. * - [format]: Optional format string. See below. * - [component]: Optional component selector. See below. * - [subchannel]: Optional subchannel selector. See below. * - [max_level]: Optional maximum log level. See below. *) class type multi_file_config = object inherit generic_config method log_directory : string method log_files : (string * string * [ level | `All ] * string * string) list (** Triples [ (component, subchannel, max_level, file, format) ]. Use [*] as wildcard in [component] and [subchannel]. Currently, [`All] is a synonym for the [`Debug] level. *) end val multi_file_logger : multi_file_config -> logger val multi_file_logger_factory : logger_factory (** Reads a logging section like * * {[ logging { * type = "multi_file"; * directory = "/path/to/logdir"; * format = "<format string>"; * file { * component = "<name_of_component>"; * subchannel = "<name_of_subchannel>"; * max_level = "<max_level>"; * file = "<logfile>"; * format = "<format string>"; * }; * file { ... }; ... * } * ]} * * - [format]: Optional format string. See below. * - [component]: Optional component selector. See below. * - [subchannel]: Optional subchannel selector. See below. * - [max_level]: Optional maximum log level. See below. *) class type syslog_config = object inherit generic_config method log_identifier : string method log_facility : Netsys_posix.syslog_facility end val syslog_logger : syslog_config -> logger (** Creates a logger writing to syslog *) val syslog_logger_factory : logger_factory (** Reads a logging section like * * {[ logging { * type = "syslog"; * format = "<format string>"; * identifier = "<identifier>"; * facility = "<facility name>"; * component = "<name_of_component>"; * subchannel = "<name_of_subchannel>"; * max_level = "<max_level>"; * } * ]} * * All parameters except [type] are optional: * - [facility]: The faciltiy like [LOCAL0], [USER], ... * - [identifier]: An identifier prefixing every message * - [format]: Optional format string. See below. * - [component]: Optional component selector. See below. * - [subchannel]: Optional subchannel selector. See below. * - [max_level]: Optional maximum log level. See below. *) val logger_factories : logger_factory list (** All built-in logger factories *) val level_weight : level -> int (** An integer corresponding to the level *) val level_of_string : string -> level (** Convert a string to a level *) (** {2 Common parameters} *) (** Logging parameters that can occur in all logging configurations: *) (** {3 format} * * The format string may include variable * parts in the syntax [$name] or [${name}]. The following variable * specifications are defined: * - [timestamp]: the time in standard format * - [timestamp:<format>] the time in custom format where [<format>] is a * {!Netdate} format string * - [timestamp:unix]: the time in seconds since the epoch * - [component]: the name of the component emitting the log message * - [subchannel]: the name of the subchannel * - [level]: the log level * - [message]: the log message *) (** {3 component} * * The [component] name restricts logging to the given Netplex component. * One can use the wildcard "*". *) (** {3 subchannel} * * The [subchannel] name restricts logging to this subchannel. * One can use the wildcard "*". *) (** {3 max_level} * * The [max_level] specifier restricts logging to messages with at most * this level. Levels are "emerg", "alert", "crit", "err", "warning", * "notice", "info", "debug" (in order of increasing level). *)