Logging

The :std/logger library provides basic logging facilities.

To use bindings from this module

(import :std/logger)

Overview

The logging system is built around the notion of sources and levels; a source indicates the origin of a log message and the level indicates th severity of the condition.

There are 5 pre-defined levels:

  • ERROR (0) -- indicates an error condition in the program.
  • WARN (1) -- indicates a warning.
  • INFO (2) -- indicates an informational message.
  • DEBUG (3) -- indicates a debug message.
  • VERBOSE (4) -- indicates a verbose debug message.

You can customize the threshold level over which messages are logged by parameterizing current-logger-options. The parameter value can be either a level (symbolic or fixnum) or an instance of logger-options, which allows you to set a default and per-source threshold levels.

You can use the deflogger macro to define a log source, which will expand to define 5 logging functions: errorf, warnf, infof, debugf, and verbosef. These are format-like functions, that accept a message string with optional format arguments, and log using the specified source.

Finally, in order to log messages, you must start a logger actor with start-logger! somewhere in your program. You can supply a port (defaults to current-error-port) or a file path, to which log output will be appended.

Procedures and Macros

deflogger

(deflogger source)
=>
(begin
  (def (errorf fmt . args) ...)
  (def (warnf fmt . args) ...)
  (def (infof fmt . args) ...)
  (def (debugf fmt . args) ...)
  (def (verbosef fmt . args) ...))

Macro which Defines log functions for a specific log source.

start-logger!

(start-logger! [output = (current-error-port)])
  output := output-port; for inline logging in an existing port
            string; file name to append to
=> <logger>

Ensures that a logger is running:

  • If the current logger is set, then it returns the current logger.
  • Otherwise it creates a new logger logging to output, sets the current logger, and returns the logger

current-logger

(current-logger [<logger>])

Parameter denoting the current logger

current-logger-options

(current-logger-options [<logger-options>|<symbol>|<fixnum>])

Parameter denoting the current logger options. The value can be a level (symbolic of fixnum) or an instance of logger-options.

logger-options

(make-logger options <threshold> <per-source-thresholds>)
=> <logger-options>

(logger-options? obj) => bool

The logger options allow you to specify a default and per source log thresholds, so that you can customize the log output of a program post factor. The constructor accepts a a threshold level (symbolic or fixnum) and a hash table of source to threshold level.

errorf

(errorf fmt . args)
  fmt  := string; a format specifier
  args := arguments for format specifier

Predefined error logger, using the default source.

warnf

(warnf fmt . args)
  fmt  := string; a format specifier
  args := arguments for format specifier

Predefined warn logger, using the default source.

infof

(infof fmt . args)
  fmt  := string; a format specifier
  args := arguments for format specifier

Predefined info logger, using the default source.

debugf

(debug fmt . args)
  fmt  := string; a format specifier
  args := arguments for format specifier

Predefined debug logger, using the default source.

verbosef

(verbosef fmt . args)
  fmt  := string; a format specifier
  args := arguments for format specifier

Predefined verbose logger, using the default source.