I may be missing something, but `log-debug` and friends already do that. stamourv@westmount:2014-12-12 16:45:plt$ racket Welcome to Racket v6.1.1.6. -> (log-debug (begin (displayln "hello!") "log")) -> stamourv@westmount:2014-12-12 16:45:plt$ racket -W debug Welcome to Racket v6.1.1.6. GC: 0:min @ 1,356K(+307K)[+160K]; free 932K(-5,028K) 4ms @ 12 GC: 0:min @ 1,813K(+3,946K)[+232K]; free 755K(-2,051K) 4ms @ 20 GC: 0:min @ 4,040K(+4,087K)[+232K]; free 1,448K(-1,448K) 4ms @ 28 GC: 0:min @ 5,015K(+3,112K)[+240K]; free 1,425K(-6,817K) 4ms @ 40 GC: 0:min @ 7,459K(+6,060K)[+272K]; free 2,162K(-3,458K) 0ms @ 56 GC: 0:min @ 9,356K(+6,211K)[+280K]; free 1,628K(-2,924K) 4ms @ 72 GC: 0:min @ 13,230K(+4,353K)[+296K]; free 2,558K(-16,142K) 12ms @ 96 GC: 0:min @ 17,224K(+13,943K)[+392K]; free 3,900K(-6,492K) 12ms @ 136 GC: 0:min @ 21,878K(+12,457K)[+400K]; free 4,741K(-6,037K) 12ms @ 172 GC: 0:min @ 27,016K(+9,255K)[+988K]; free 6,168K(-8,760K) 16ms @ 232 GC: 0:min @ 32,548K(+6,315K)[+1,276K]; free 7,665K(-26,641K) 36ms @ 312 -> (log-debug (begin (displayln "hello!") "log")) hello! log ->
`log-message`, however, does not. The problem may be that, when you switch to the lower logging level, your old listener for the higher level is still around to receive the messages. Vincent At Fri, 12 Dec 2014 13:32:41 -0800, Matthew Butterick wrote: > > Is there a reason not to redefine `log-debug` et al as macros that evaluate > their arguments lazily? > > Sort of like this; > > (if ((current-logging-level) . is-equal-or-above? . 'debug) > (log-debug arg ...) > (void)) > > Because I find that my use of these functions often looks like this: > > (log-debug "Value = ~a" (expensive-operation-for-logging-purposes)) > > The problem is that when I change to a lower logging level, the > (expensive-operation) is still evaluated. > > I asked a similar question about hash-ref! not long ago. The answer was that > you can get lazy evaluation by wrapping the default argument in a lambda, > like so: > > (hash-ref! hashtable key (λ () (expression-that-produces-value))) > > But it seems there's no equivalent idiom for `log-debug` et al. > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users