logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Gregory <garydgreg...@gmail.com>
Subject Re: Async DynamicThresholdFilter broken?
Date Tue, 19 Jan 2016 20:18:36 GMT
[I hit 'Send' by mistake!]

Hi Francis,

It sounds like POB (Plain Old Bug) to me. Can you create a JIRA and attach
a diff file please?

We should also look at all the call sites for ThreadContext.get(String) and
readers of ThreadContext in general.

Francis, if you can give a scan for similar ThreadContext issues, I would
greatly appreciate it.

Thank you!
Gary

On Tue, Jan 19, 2016 at 12:15 PM, Gary Gregory <garydgregory@gmail.com>
wrote:

> Sounds like POB (Plain Old Bug). Can you create a JIRA and attach a diff
> file please?
>
>
> On Tue, Jan 19, 2016 at 11:51 AM, Francis Lalonde <fralalonde@expedia.com>
> wrote:
>
>> Hello Log4J users,
>>
>> I am using Log4J 2.5 with AsyncLogger mode enabled. I am trying to filter
>> events at the Appender level using DynamicThresholdFilter but it is not
>> working.
>>
>> I believe this is because the filter is basing its decision on the
>> ThreadContext even though it is filtering an asynchronous event on a worker
>> thread :
>>
>>     private Result filter(final Level level) {
>>         final Object value = ThreadContext.get(key); // always returns
>> null, ThreadContext is empty on disruptor thread
>>         if (value != null) {
>> ...
>>
>> I fixed the DynamicThresholdFilter to use the context from the log event
>> instead,  and it  gave me the expected filtering behavior :
>>
>>     private Result filter(final Level level, Map<String, String> context)
>> {
>>         final Object value = context.get(key);
>>         if (value != null) {
>> ...
>>
>>     public Result filter(final LogEvent event) {
>>         return filter(event.getLevel(), event.getContextMap());
>>     }
>>
>>     public Result filter(final Logger logger, final Level level, final
>> Marker marker, final Message msg,
>>                          final Throwable t) {
>>         return filter(level, ThreadContext.getContext());
>>     }
>>
>> ThreadContextMapFilter is built the same way. Unless I am mistaken and
>> forgot some basic tenement of log4j usage, this make these Filters useless
>> in async mode elsewhere than Context-wide.
>>
>> Should I keep  on using my fixed version of the Filter or should I submit
>> a tentative fix? If so, please tell me what is the procedure to do so.
>>
>> Thank you,
>>
>> Francis
>>
>>
>>
>>
>>
>
>
> --
> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> Java Persistence with Hibernate, Second Edition
> <http://www.manning.com/bauer3/>
> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> Spring Batch in Action <http://www.manning.com/templier/>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
>



-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message