Early review of std.logger

Sönke Ludwig sludwig at outerproduct.org
Tue Oct 15 06:21:08 PDT 2013


Am 15.10.2013 10:41, schrieb Robert Schadek:
> On 10/15/2013 02:44 AM, Kapps wrote:
>> The simple act of logging a message is very verbose right now:
>> log(LogLevel.trace, "Creating new pool") is a lot of boiler plate. I'd
>> prefer something like log.trace("Creating new pool") and log("Creating
>> new pool") where the latter would use opCall to forward to the default
>> log level. If it's intentional that you can assign the result of log,
>> this also helps that because log = new StdIOLogger would be possible
>> (log being a property that returns a Logger, and so a setter could be
>> made), but log("Creating new pool") = new StdIOLogger() would not be.
> The LogLevel is optional. And always writing log.trace might become more
> typing work and assigning a LogLevel and than calling log("..."). Both
> have pros and cons

What happens when a called function alters the default log level?

---
void func1() {
	log.logLevel = LogLevel.debug;
	log("This is a debug message");
	func2();
	log("This is supposed to be a debug message");
}

void func2() {
	log.logLevel = LogLevel.warning;
	log("This is a warning");
}
---


I don't think it's a good idea to use such kind of global state, 
especially for a logging framework that is supposed to be shared between 
libraries, so that it is difficult to predict what a particular function 
does. With a logger that is shared between threads, things get worse of 
course.

A related question: It seems like Logger.logLevel at the same time means 
the minimum log level that is output and the default log level, is that 
right?


More information about the Digitalmars-d mailing list