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

Reply via email to