Hi,
I recently was trying to use the FilterBasedTriggeringPolicy along with
a StringMatchFilter to trigger log file rolling upon the emission of a
specific log event.
but whatever the value I give to StringMatchFilter's "acceptOnMatch"
(see the log4j configuration at the end of the post), be it "false"
or "true", I end-up with one file per log event !
I looked at the FilterBasedTriggeringPolicy's source code and see a
strange looking isTriggeringEvent method:
public boolean isTriggeringEvent(LoggingEvent event) {
//
// in the abnormal case of no contained filters
// always return true to avoid each logging event
// from having its own file.
if (headFilter == null) {
return false; << OK, could be optimized out
}
//
// otherwise loop through the filters
//
for (Filter f = headFilter; f != null; f = f.next) {
switch (f.decide(event)) { << could be optimized
case Filter.DENY:
return false;
case Filter.ACCEPT:
return true;
}
}
return true; << WTF!
}
I then wrote my own TriggeringPolicy implementation as follow
(as a side note: I couldn't derive from FilterBasedTriggeringPolicy
because it is final - god know why)
public boolean isTriggeringEvent(final LoggingEvent event) {
for(Filter f = headFilter; f != null; f = f.getNext()) {
if(f.decide(event) == Filter.ACCEPT) {
// if one filter accept the event then return true
return true;
}
}
// otherwise always return false to avoid each logging event
// from having its own file
return false;
}
Can someone take a look and tell me if the original implementation
is on purpose or if it is a bug left behind ?
Here's the log4j configuration (classes FQN shortened by hand):
<appender name="file" class="o.a.l.rolling.RollingFileAppender">
<rollingPolicy class="o.a.l.rolling.FixedWindowRollingPolicy">
<param name="FileNamePattern" value="operations.%i.log" />
</rollingPolicy>
<triggeringPolicy class="o.a.l.rolling.FilterBasedTriggeringPolicy">
<filter class="org.apache.log4j.filter.StringMatchFilter">
<param name="stringToMatch" value="*** log-rolling ***" />
<param name="acceptOnMatch" value="false" />
</filter>
</triggeringPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c{5}] %m%n" />
</layout>
</appender>
thanks;
Zart Colwing.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]