▼ |  | Unstable: May Change Without Warning

1 | Guidelines for Developing unstable Libraries
2 | Automata: Compiling State Machines
3 | Bytes
4 | Contracts
5 | Converting Values to Strings
6 | Contracts for Macro Subexpressions
7 | Debugging
8 | Definitions
9 | Filesystem
10 | Find
11 | Flonums
12 | Futures
13 | Functions
14 | Hash Tables
15 | Interface-Oriented Programming for Classes
16 | Lazy Require
17 | Lists
18 | Logging
19 | Mark Parameters
20 | Match
21 | Parameter Groups
22 | Pretty-Printing
23 | Sequences
24 | Strings
25 | Structs
26 | Syntax
27 | Temporal Contracts: Explicit Contract Monitors
28 | GUI Libraries

On this page:

with-logging-to-port
with-intercepted-logging
start-recording
stop-recording

Version: 5.3
top← prev up next →

### 18`` Logging

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

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

(require unstable/logging)

This module provides tools for logging.

> > procedure

> > (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"

> > procedure

> > (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.

> > procedure

> > (start-recording [#:level level]) → listener?

> level : (or/c 'fatal 'error 'warning 'info 'debug) = 'debug

> > procedure

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

top← prev up next →