forked from dyoo/whalesong
/
logger.rkt
53 lines (36 loc) · 1.37 KB
/
logger.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#lang racket/base
(require racket/match
racket/list)
;; A small module to provide logging for Whalesong.
(provide whalesong-logger)
(define whalesong-logger (make-logger 'whalesong))
(define (log-debug message . args)
(log-message whalesong-logger
'debug
(if (empty? args) message (apply format message args))
#f))
(define (log-warning message . args)
(log-message whalesong-logger
'warning
(if (empty? args) message (apply format message args))
#f))
(define (log-error message . args)
(log-message whalesong-logger
'error
(if (empty? args) message (apply format message args))
#f))
(define should-print-logs? #f)
(define (set-whalesong-log-printing! v)
(set! should-print-logs? v))
(void (thread (lambda ()
(let ([receiver
(make-log-receiver whalesong-logger 'debug)])
(let loop ()
(let ([msg (sync receiver)])
(when should-print-logs?
(match msg
[(vector level msg data)
(printf "~a: ~a\n" level msg)]))
(loop)))))))
(provide whalesong-logger log-debug log-warning log-error
set-whalesong-log-printing!)