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

Reply via email to