Review: std.logger

linkrope via Digitalmars-d digitalmars-d at puremagic.com
Wed Jul 23 10:56:51 PDT 2014


On Tuesday, 22 July 2014 at 23:43:59 UTC, Robert burner Schadek 
wrote:
> On Tuesday, 22 July 2014 at 21:52:09 UTC, linkrope wrote:
>> Controversial conditional logging
>> ----------------------------
>> The only advantage of
>>    tracec(condition, "passed");
>> over
>>    if (condition) trace("passed");
>> would be, that a costly evaluation of the condition is omitted 
>> when there is no trace logger.
>> That's why the std.log proposal had 'when(lazy bool now)'.
>>
>> First, I was puzzled about your argument that LOG_FIRST_N or 
>> LOG_EVERY_N would be no problem with the '...c' functions. But 
>> a look at the implementation confirmed that the std.logger has 
>> no lazy evaluation of the condition; discarding the only 
>> advantage.
>
> passing a bool as a delegate that is the first thing that gets 
> evaluated does not sound right.

Indeed: that's why the lazy condition should be evaluated last!

Your "will log" condition is very simple and efficient: only >= 
and !=
But you cannot know, how long the evaluation of the user-provided 
condition will take.

BTW: with 'globalLogLevel', 'defaultLogger.logLevel'and 
'LogLevel.off' the usual 'willLog' predicate will come in handy 
to avoid code duplication.

While the lazy evaluation of the condition would be the only 
advantage over

     if (condtion) log(...);

I haven't encountered a single opportunity for conditional 
logging in the code of our company.

'if'/'log' is always followed by 'return', 'break', 'continue', 
...

     if (condition)
     {
         log("will do something else because condition passed");
         return;
     }


More information about the Digitalmars-d mailing list