2015-03-13 103 views
0

Logback中的标记对于通过上下文(由标记提供)过滤事件非常有用。通常我使用的TurboFilter摆脱有(或没有)记录事件与他们相关联的特定标记的:过滤掉没有标记的事件

<turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter"> 
    <Marker>Data</Marker> 
    <OnMatch>DENY</OnMatch> 
</turboFilter> 

现在虽然,我有,我想筛选出一个特殊用例所有记录事件都有标记与它们相关联。通过为所使用的每个标记提供一个TurboFilters链,可以允许匹配并传递,如果不是这样,但可能最终导致一个相当大而乏味的配置位,每次新标记都必须更新介绍。

长话短说:是否有一种简单的方法来过滤掉所有Logback记录事件而不是带有标记?

回答

0

由于没有办法实现这个开箱,我最终实现我自己的过滤器,这是该用例很简单:

public class NoMarkerFilter extends MatchingFilter { 

@Override 
public FilterReply decide(final Marker marker, final Logger logger, final Level level, final String format, 
     final Object[] params, final Throwable t) { 
    if (!isStarted()) { 
     return FilterReply.NEUTRAL; 
    } 

    if (marker == null) { 
     return onMatch; 
    } 
    return onMismatch; 
} 

然后它可以在类似配置中使用这个:

<turboFilter class="com.example.NoMarkerFilter"> 
    <OnMatch>DENY</OnMatch> 
</turboFilter>