Review of Jose Armando Garcia Sancio's std.log

Jose Armando Garcia jsancio at gmail.com
Tue Mar 6 11:19:27 PST 2012


On Mon, Mar 5, 2012 at 1:55 PM, Steven Schveighoffer
<schveiguy at yahoo.com> wrote:
> On Mon, 13 Feb 2012 10:50:04 -0500, David Nadlinger <see at klickverbot.at>
> wrote:
>
>> There are several modules in the review queue right now, and to get things
>> going, I have volunteered to manage the review of Jose's std.log proposal.
>> Barring any objections, the review period starts now and ends in three
>> weeks, on March 6th, followed by a week of voting.
>
>
>
> Some notes:
>
> I dislike that logging affects function execution.  In particular, I don't
> think the logging library should have any business throwing exceptions or
> errors.  It should be invisible to the application.  The equivalent function
> can be had by giving a wrapper function (i.e. log this message at the fatal
> level, and then throw an error).  A use case I can see is printing several
> fatal log messages before exiting.
>
Then don't use std.log.fatal. It is not like you are forced to use it.
You can implement the above by using std.log.error

> The log aliases use names that are too common.  I think log.info is a better
> symbol for logging than just 'info', which could be a symbol in a myriad of
> places.  Given that D's symbol lookup rules allow shadowing of global
> symbols, this does not work out very well.
>
This is a tough one. Should we be relying on D's module abstraction.
It is not scalable as a module designer and implementer to think about
other modules. This is why a lot of programming languages implement
the concept of namespaces.

import log = std.log;
log.info("hello world");

> Like others have stated, I think vlog is a) confusing, and b) unnecessary.
>  Even reading the docs, I can't understand what it's used for, and why it
> has such different syntax than the normal logging stuff.
>
I have tried to explain this before but it looks like I have failed. I
find it useful. If you are interested on a different explaination:
http://google-glog.googlecode.com/svn/trunk/doc/glog.html

> I really like the every function, that's a great idea, one that I've
> manually implemented (at least the once every N times) many times.
>

Great!

> Do we have to make the logger a singleton?  I'd like to see cases where I
> can have different log instances.  For example, an instance I can
> enable/disable per class type, or an instance that logs to a diffferent
> backend.  Or a non-shared instance which does not need to handle threading
> issues (i.e. a per-thread file log). Does this help with the vlog issue?
>
My point of view here is that as a developer I never know how I want
to categorize my log during development. Some people use class name as
a hack for doing this. What about functional programs that don't use
class/objects? What about logical component/classes that span multiple
classes? I always found class based grouping for logging as a hack. D
made the observation that classes are not always the best abstraction
unit so it introduced modules. std.log filters based on modules
(actually source files to be exact but if D had __MODULE__, std.log
would use that instead.)

> -Steve


More information about the Digitalmars-d mailing list