Am Fri, 12 Sep 2014 09:46:18 +0000
schrieb "Robert burner Schadek" <rburn...@gmail.com>:

> On Thursday, 11 September 2014 at 22:10:01 UTC, Marco Leise wrote:
> > Let me clarify. Here is some code from 2015:
> >
> > void main()
> > {
> >     stdlog = new MyLogger();
> >     // This call may overflow the stack if
> >     // 'somethingBadHappened in someFunc():
> >     error("ERROR!!!");
> > }
> >
> > class MyLogger : Logger
> > {
> >     override void writeLogMsg(ref LogEntry payload)
> >     {
> >             auto bla = someFunc();
> >             useBlaToLog(bla, payload.msg);
> >     }
> > }
> >
> > // This is just some helper function unrelated to logging
> > // but it uses the stdlog functionality from Phobos itself
> > // as that is good practice in 2015.
> > auto someFunc()
> > {
> >     ...
> >     if (somethingBadHappened)
> >     {
> >             // Now I must not be used myself in a logger
> >             // implementation, or I overflow the stack!
> >             error("something bad in someFunc");
> >     }
> >     ...
> > }
> 
> well you could set the LogLevel to off and reset it afterwards

Remember that the stdlog is __gshared? Imagine we set the
LogLevel to off and while executing writeLogMsg ...

* a different thread wants to log a warning to stdlog
* a different thread wants to inspect/set the log level

It is your design to have loggers shared between threads.
You should go all the way to make them thread safe.

* catch recursive calls from within the same thread,
  while not affecting other threads' logging
* make Logger a shared class and work with atomicLoad/Store,
  a synchronized class or use the built-in monitor field
  through synchronized(this) blocks.

> > 3. Exceptions and loggin don't mix.
> > How do you log errors that also throw exceptions ?
> 
> please elaborate. I think I misunderstand

I know when to throw an exception, but I never used logging
much. If some function throws, would I also log the same
message with error() one line before the throw statement?
Or would I log at the place where I catch the exception?
What to do about the stack trace when I only have one line per
log entry?
You see, I am a total newbie when it comes to logging and from
the question that arose in my head I figured exceptions and
logging don't really mix. Maybe only info() and debug() should
be used and actual problems left to exception handling alone.

-- 
Marco

Reply via email to