DWT2 Phobos-compatible logging suggestion

Jeremy Powers jpowers at wyrdtech.com
Tue Jul 13 14:46:25 PDT 2010


Looks reasonable to me.  Some comments:

I see a danger w/ having the whole class version()'ed around - the
methods are defined twice, and need to be kept in sync.  Would it be
better to just do the version around the implementations?  I.E.
something like:

  class DWTLogger {
    version(Tango) {
      tango.util.log.Log.Logger logger;
    }
    ...
    void info(T...)(String file, ulong line, String fmt, T args){
      version(Tango) {
        ...
      } else {
        ...
      }
    }

Also, should the tags for the different levels match log4j style?
That is, use 'INFO', 'DEBUG', etc....

Aside:  I was hoping there would be a D-standard logging solution
similar to log4j, but haven't found one outside of Tango yet - not
sure how important logging is to DWT itself, but this is definitely
something needed for many projects.  If such a thing did exist, we
could just delegate to it (or use directly).

One more:

> 4) ExceptionPrintStackTrace has become less flexible, but this shouldn't
> matter and can easily be fixed if needed.

I've been mucking around with the way exceptions are defined, to allow
Java-translated code to work with less changes, so assuming I actually
get that done and it works the ExceptionPrintStackTrace method should
be unneeded - in favor of just doing e.printStackTrace().  Anyway,
when I get that part finished I'll send something to the list.


I'm actually a big fan of code reviews as a form of collaboration - do
you want to use the list as a place for this kind of thing, or does it
make sense to do something more formal w/ issue tracking etc?

Jeremy

On Tue, Jul 13, 2010 at 2:00 PM, torhu <no at spam.invalid> wrote:
> Ok, this is sort my way to get some cooperation going on the DWT project.
>  Check it out and make suggestions for improvements, or just say "ok" if you
> approve :)
>
> I've been trying for a couple of hours to find a way to do logging that's
> compatible with both Phobos and Tango.
>
> Here's what I came up with, this is tested and working:
> http://pastebin.ca/1900029
>
> This is what I had to take into consideration:
>
> 1) Phobos formatting uses functions like format(...), while tango uses
> format(char[] fmt, ...).  Using the signature func(T...)(String fmt, T args)
> was the simplest way I found to be able to just forward arguments to both
> kinds of formatters.
>
> 2) Format specifiers are different.  I just did fmt = replace(fmt, "{}",
> "%s") in the Phobos version, which takes care of most cases.  We can revisit
> this later if there's an actual need for more flexible formatting.
>
> 3) The IDwtLogger interface had to go, as template member functions cannot
> be virtual. Cfr. item 1.  The interface was not put to use anywhere, so this
> should be of no concern.
>
> 4) ExceptionPrintStackTrace has become less flexible, but this shouldn't
> matter and can easily be fixed if needed.
>


More information about the Digitalmars-d-dwt mailing list