[slf4j-dev] Missing Trowables in EventRecordingLogger
Ceki Gülcü
ceki at qos.ch
Sun Aug 11 22:26:23 CEST 2019
Hi Wessel,
Comments below.
On 09/08/2019 01:09, Wessel van Norel wrote:
> Hi,
>
> I was recently doing a code review for a coworker and saw that he was
> concatenating strings and not using the varargs method of building the
> log message. I asked him why he was doing that and he explained it was
> because he also had a Throwable that he wanted to be passed as argument
> to see the stacktrace. He was not aware of the change in SLF4J 1.6.0
> which allows us to pass a Throwable as last argument to the varargs.
>
>
> "Unfortunately", when I was showing him implementations of this, I
> encountered the slf4j EventRecordingLogger and this implementation of
> the slf4j logger does not comply with this "new" behaviour. However I'm
> not sure if this is intentional.
It's not intentional.
> Assuming it's not intentional, I've created a fork and I've made the
> required changes. But before I spend "days" on this while it's
> intentional I thought: let's write a quick email about this and ask for
> guidance.
Good idea.
> I also saw that in the case of 2 Object arguments, the MessageFormatter
> seems to be suboptimal and is creating more objects then strictly required.
>
> For the 1 Object argument case it it's also doing too much, certainly in
> case someone calls it with a Throwable. I've now added a runtime check
> to it. Since overloading it with a Throwable version will change the way
> the method behaves in case the caller does not know if it's being given
> a Throwable or an Object. It would be very illogical to call this method
> with a Throwable, with the 1.6 way of dealing with Throwables, since
> what do you want to format then?
>
> But with the runtime check people won't loose their stacktraces, and
> otherwise in case the MessageFormatter is being used in a wrong way
> people will see their stacktraces being converted into one line because
> of a (minor? it's one instanceof call too many per call to the one
> Object logger variant) performance optimization.
Right.
>
> I've not yet created the test cases for the EventRecordingLogger, I'll
> do that in case it's indeed unintentional that it's loosing the
> Throwables. I've added two tests for the changes I made to the
> MessageFormatter. While I was at it I also applied some improvements
> IntelliJ suggested.
Very good. In general, it is preferable if the more meaningful changes
are separate from more cosmetic ones even if both are welcome.
> You can see my changes on my fork:
>
> https://github.com/qos-ch/slf4j/compare/master...delgurth:eventrecordinglogger?expand=1
I have made some comments there.
In any case, I think the unit test as well the change to the
org.slf4j.event.EventRecodingLogger.recordEvent method are warranted. I
propose to discuss changes to MessageFormatter class separately.
Also can you please create a Jira ticket describing the bug in
EventRecodingLogger.recordEvent?
Many thanks,
--
Ceki
More information about the slf4j-dev
mailing list