On 10/14/2013 02:39 PM, Sönke Ludwig wrote:
Am 14.10.2013 13:39, schrieb Dicebot:
As `std.logger` is still marked as "work in progress" this thread is
less formal that typical pre-voting review. Goal is to provide as much
input about desirable `std.logger` functionality and current state and
let module author to use this information for preparing proposal for
actual review / voting.

Lets unleash the forces of constructive destruction.

===== Meta =====

Code: https://github.com/D-Programming-Language/phobos/pull/1500/files
Docs: http://burner.github.io/phobos/phobos-prerelease/std_logger.html

First announcement / discussion thread :
http://forum.dlang.org/post/mailman.313.1377180809.1719.digitalmars-d@puremagic.com


Sorry in advance for the long list of issues. I think the general approach is fine, but over the years I've grown some preferences for this stuff. Generally, I think we should make sure that such a module is flexible enough to fulfill most people's needs, or it will probably fail the widespread adoption that is desired to actually improve interoperability.

 - LogLevel: enum values should start lower case according to the
   Phobos conventions.
will be fixed
 - The static methods in LogManager should be made global and the class
   be removed. It's not for objects so it shouldn't be a class.
LogManager also stores the global log level. Sure I can make another static global function storing this log level, but I would like to keep them together as they belong together IMO.
 - For me this logger is completely worthless without any debug log
   levels. The last std.log entry had at least anonymous verbosity
   levels, but I'd prefer something like I did in vibe.d [1], where
   each level has a defined role. This should especially improve the
   situation when multiple libraries are involved.
Logger.log(LogLevel.(d|D)ebug, "Your message");
 - Similarly, I've never felt the need for conditional logging, but
   without it being lazy evaluated what's the use for it, actually?
The conditional logging part is totally transparent.
 - I really think there should be shortcuts for the different log
   levels. Typing out "LogLevel.xxx" each time looks tedious for
   something that is used in so many places.
One could argue that writting logger.logDebug("...") is more tedious than writing,
logger.logLevel = LogLevel.xxx;
logger.log("...");
logger.log("...");
...

This has been argued in the last logger discussion to some extend and it looked to me like this is the mostly preferred version.
 - There should be some kind of MultiLogger so that multiple log
   destinations can be configured (e.g. console + file). Or, instead of
   a single default logger, there could be a list of loggers.
there is one default logger. I will create a MultiLogger, good point. I'm currently sure how to store the multi logger (LL or Array or ... )
 - Logger.logMessage: Exchanging the bunch of parameters with a single
   struct that is passed by reference makes the API much more
   flexible/future-proof and is more efficient when the data needs to
   be passed on to other functions.
good point
 - "shared" - probably best to leave this out until we have a verified
   design for that - but in theory the loggers should probably be
   shared.
my thoughts exactly
 - On the same topic, if I'm right and the default logger is stored as
   __gshared, it should be documented that Loggers need to be
   thread-safe.
It is not stored __gshared, but If, you're right.
 - GC allocations for each log message _must_ be avoided at all costs.
   Using formattedWrite() instead of format() on either a temporary
   buffer that is reused, or, better, on some kind of output range
   interface of the Logger would solve this.
This was proposed in the last thread. A fixed size buffer would scream bufferoverflow, a dynamic buffer not but both would raise the question of thread safety. 
 - A note on DDOC comments: The first paragraph of a doc comment is
   treated as a short description according to the DDOC spec. It should
   be kept to around a single sentence, followed by a more detailed
   paragraph. While this doesn't matter much with the current HTML doc
   layout, the short description is used in the single-page
   documentation inside of overview tables [2].
Will be fixed

Awesome comments, thanks