On May 22, 2010, at 10:50 AM, Ralph Goers wrote:
>
>>
>> Also, I have had an issue where the I wanted the toString() method on the
>> object to be logged to be delayed as much as possible (somewhat helped with
>> the {}-construct in slf4j). This might be doable with a specific log
>> interface.
>
> That is exactly what Message does.
>
My thoughts, but not sure how much of this got into my earlier code, was to
have a distinct extraction phase that occur synchronously with the logging call
that would extract all info needed for a completion phase that could occur
either immediately or be deferred. The extraction phase would need to extract
any info from the call into immutable objects so state change, for example
mutable message parameters, before the completion stage would not change the
resulting log.
A example where this would be useful is logging floating point numbers. It can
be surprisingly expensive to format floating point numbers, so it is highly
beneficial to extract all the pieces needed for the formatting into an
immutable package during the synchronous extraction phase and then do the
formatting in the asynchronous completion phase.
The AsynchronousAppender in log4j requires trying to freeze LoggingEvent which
is still subject to message objects changing underneath it. Also it generally
perform unnecessary actions in freezing everything in the LoggingEvent even
though much of it will not be used.
The framework should be designed to separate the parts required to be
synchronous (that is anything dealing with external objects) from the parts
that can be deferred.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]