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

Reply via email to