racket/collects/unstable/scribblings/logging.scrbl
2011-07-21 17:06:03 -04:00

88 lines
2.6 KiB
Racket

#lang scribble/manual
@(require scribble/eval "utils.rkt" (for-label racket unstable/logging))
@(define the-eval (make-base-eval))
@(the-eval '(require unstable/logging))
@title{Logging}
@defmodule[unstable/logging]
This module provides tools for logging.
@unstable[@author+email["Vincent St-Amour" "stamourv@racket-lang.org"]]
@defproc[(with-logging-to-port
[port output-port?] [proc (-> any)]
[#:level level (or/c 'fatal 'error 'warning 'info 'debug) 'debug])
any]{
Runs @racket[proc], outputting any logging of level @racket[level] or higher to
@racket[port]. Returns whatever @racket[proc] returns.
@defexamples[
#:eval the-eval
(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))]}
@defproc[(with-intercepted-logging
[interceptor (-> (vector/c
(or/c 'fatal 'error 'warning 'info 'debug)
string?
any/c)
any)]
[proc (-> any)]
[#:level level (or/c 'fatal 'error 'warning 'info 'debug) 'debug])
any]{
Runs @racket[proc], calling @racket[interceptor] on any log message of level
@racket[level] or higher. @racket[interceptor] receives the entire log vectors
(see @secref["receiving-logged-events" #:doc '(lib "scribblings/reference/reference.scrbl")])
as arguments. Returns whatever @racket[proc] returns.
@defexamples[
#:eval the-eval
(let ([warning-counter 0])
(with-intercepted-logging
(lambda (l)
(when (eq? (vector-ref l 0) ; actual level
'warning)
(set! warning-counter (add1 warning-counter))))
(lambda ()
(log-warning "Warning!")
(log-warning "Warning again!")
(+ 2 2))
#:level 'warning)
warning-counter)]}
A lower-level interface to logging is also available.
@deftogether[[
@defproc[(start-recording
[#:level level (or/c 'fatal 'error 'warning 'info 'debug) 'debug])
listener?]
@defproc[(stop-recording [listener listener?])
(listof (vector/c (or/c 'fatal 'error 'warning 'info 'debug)
string?
any/c))]]]{
@racket[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 @racket[stop-recording]. @racket[stop-recording] will then
return a list of the log messages that have been reported.
@defexamples[
#:eval the-eval
(define l (start-recording #:level 'warning))
(log-warning "1")
(log-warning "2")
(stop-recording l)
]}