Uriah'ın cevabı harika!
Özetle, AbstractMatcherFilter'ın daha iyi bir başlangıç olabileceğini düşünüyorum.
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>
Sadece kendi mantığı ile markerToMatch.contains (işaretleyici) değiştirin, AbstractMatcherFilter karar geçersiz ve (yani. Kabul) eşleştirilir hangi işaretleyici karar vermelidir.
kullanımı:
log.info(MarkerFacotry.getMarker("YOUR_MARKER"), "---msg---");