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