Dnia 26-08-2010 o 05:59:19 Andrei Alexandrescu <[email protected]> napisał(a):

At my workplace we're using Google's logging library glog (http://google-glog.googlecode.com/svn/trunk/doc/glog.html), and the more I use it, the more I like it. It's simple, to the point, and effective.

I was thinking it would be great to adapt a similar design into Phobos. There will be differences such as use of regular argument lists instead of << etc., but the spirit will be similar. What do you think?

Hm.. why not. Some quick thoughts:

* Only a subset of features needs to be ported, e.g.
DLOG(...) == version(debug) LOG(...)
CHECK == enforce()
Also, I don't get the superlativeness of LOG_IF(INFO, pred) << ... versus if (pred) LOG(INFO) << ...

* Instead of LOG(INFO, msg), please go for Log.info(msg).

* LOG_EVERY_N, LOG_FIRST_N, ... generalizes to Log.info!n_pred, where n_pred is a function taking an int. I'm curious about the D implementation, though - how to pull off a separate counter for every calling site? I can think only of mixins, I mean the ugly ones.

* Consider Log.errorf(msg, args, to, fill, in, holes, in, msg) - I know there's Log.error(msg, format(args...)), but formatted logging happens often enough to justify *f variants. Besides, it rhymes nicely with std.stdio.write(f).

* VLOG seems unnecessary. From my experience it's hard enough to keep the meaning of ordinary *named* levels consistent in an application dev'd by > 1 programmers. Custom levels whose name is a nothing-saying integer? Forget it, every one will log under his own lucky number. I'd say adding simply a VERBOSE level at the end of the scale would suffice.

* Allow per-module fine grained level settings for ordinary levels (info/warn/...)

* Implement logging function body like this:
void info(lazy string msg) { version(no_logs) else {
    ...
}}
So that flagging compilation with -version=no_logs -inline would make the logging vanish from binaries. For hardcore people.


Tomek

Reply via email to