On this page:
with-logging-to-port
with-intercepted-logging
start-recording
stop-recording
Version: 5.2

21 Logging

Vincent St-Amour <stamourv@racket-lang.org>

 (require unstable/logging)

This module provides tools for logging.

This library is unstable; compatibility will not be maintained. See Unstable: May Change Without Warning for more information.

(with-logging-to-port port    
  proc    
  [#:level level])  any
  port : output-port?
  proc : (-> any)
  level : (or/c 'fatal 'error 'warning 'info 'debug) = 'debug
Runs proc, outputting any logging of level level or higher to port. Returns whatever proc returns.

Example:

> (let ([my-log (open-output-string)])
    (with-logging-to-port my-log
      (lambda ()
        (log-warning "Warning World!")
        (+ 2 2))
      #:level 'warning)
    (get-output-string my-log))

"Warning World!\n"

(with-intercepted-logging interceptor    
  proc    
  [#:level level])  any
  interceptor : 
(-> (vector/c
      (or/c 'fatal 'error 'warning 'info 'debug)
      string?
      any/c)
     any)
  proc : (-> any)
  level : (or/c 'fatal 'error 'warning 'info 'debug) = 'debug
Runs proc, calling interceptor on any log message of level level or higher. interceptor receives the entire log vectors (see Receiving Logged Events) as arguments. Returns whatever proc returns.

Example:

> (let ([warning-counter 0])
    (with-intercepted-logging
      (lambda (l)
        (when (eq? (vector-ref l 0)
                   'warning)
          (set! warning-counter (add1 warning-counter))))
      (lambda ()
        (log-warning "Warning!")
        (log-warning "Warning again!")
        (+ 2 2))
      #:level 'warning)
    warning-counter)

2

A lower-level interface to logging is also available.

(start-recording [#:level level])  listener?
  level : (or/c 'fatal 'error 'warning 'info 'debug) = 'debug
(stop-recording listener)
  
(listof (vector/c (or/c 'fatal 'error 'warning 'info 'debug)
                  string?
                  any/c))
  listener : listener?
start-recording starts recording log messages of the desired level or higher. Messages will be recorded until stopped by passing the returned listener object to stop-recording. stop-recording will then return a list of the log messages that have been reported.

Examples:

(define l (start-recording #:level 'warning))
> (log-warning "1")
> (log-warning "2")
> (stop-recording l)

'(#(warning "1" #<continuation-mark-set>) #(warning "2" #<continuation-mark-set>))