¡La respuesta de Uriah es genial!
Y pienso para extender AbstractMatcherFilter puede ser un mejor comienzo.
public class MarkerFilter extends AbstractMatcherFilter<ILoggingEvent> {
private Marker markerToMatch = null;
@Override
public void start() {
if (null != this.markerToMatch)
super.start();
else
addError("!!! no marker yet !!!");
}
@Override
public FilterReply decide(ILoggingEvent event) {
Marker marker = event.getMarker();
if (!isStarted())
return FilterReply.NEUTRAL;
if (null == marker)
return onMismatch;
if (markerToMatch.contains(marker))
return onMatch;
return onMismatch;
}
public void setMarker(String markerStr) {
if(null != markerStr)
markerToMatch = MarkerFactory.getMarker(markerStr);
}
}
<filter class="your.pkg.MarkerFilter">
<marker>YOUR_MARKER</marker>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
Usted debe decidir anular en AbstractMatcherFilter, basta con sustituir markerToMatch.contains (marcador) con su lógica, y decidir qué marcador se corresponde (es decir., Aceptada).
uso:
log.info(MarkerFacotry.getMarker("YOUR_MARKER"), "---msg---");