On Mon, Sep 19, 2011 at 10:07 AM, John Vasileff <john.li...@gmail.com>wrote:
> > What do you think about an optional LazyRenderMessage interface (I'm sure > there is a better name for this) that could be used by Message types that > have expensive constructers? > > interface LazyRenderMessage { > void render(); > } > > The logger would call render() immediately after checking isEnabled for > level and marker. So, this should not affect serialization - the object > will either be fully constructed or discarded right away. > > This would allow ThreadDumpMessage Thread.getAllStackTraces() work to be > avoided unless logging will actually occur (or is likely to occur in the > case of complex filters). > > The benefit of course is that trace(THREAD_DUMP_MARKER, new > ThreadDumpMessage()) could be left in production code without if > isTraceEnabled(...) { ... }, and with very little overhead - creating a > short lived object that does nothing in the constructor is pretty cheap > these days. > > This would also help for Message types like ParameterizedMessage to avoid > parseArguments(arguments) when they are created by application code. > I see some merit in this idea. But you are right, it really needs a better name. Ralph