Skip to content

Instantly share code, notes, and snippets.

@Metaxal
Last active September 10, 2023 09:52
Show Gist options
  • Star 15 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save Metaxal/6511048 to your computer and use it in GitHub Desktop.
Save Metaxal/6511048 to your computer and use it in GitHub Desktop.
Simple usage of Racket's logging facility
#lang racket/base
; One way to define a logger
(define lg (make-logger 'my-logger))
; Define a receiver for this logger, along with a log level
(define rc (make-log-receiver lg 'error)) ; also try with 'debug
; Another way to define a logger, with additional forms
(define-logger lg2)
(define rc2 (make-log-receiver lg2-logger 'debug))
; Listen for events on the two log-receivers
(void
(thread
(λ () (let loop ()
(define v (sync rc rc2))
(printf "[~a] ~a\n" (vector-ref v 0) (vector-ref v 1))
(loop)))))
; Set the current logger
(current-logger lg)
; Log messages for the current logger
(log-error "Exterminate!")
(log-fatal "Exterminate! Exterminate!")
(log-debug "What's the red button for?")
; Log messages for lg2 specifically
(log-lg2-info "We're on a mission from God.")
@Metaxal
Copy link
Author

Metaxal commented Sep 10, 2013

Outputs

[error] my-logger: Exterminate!
[info] lg2: We're on a mission from God.
[fatal] my-logger: Exterminate! Exterminate!

Note that messages may not be in their initial order because they are asynchronous events

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment