Logback中的标记

auw*_*688 5 logging logback slf4j

所以我对Logback真的很新,并对如何实现某些内容提出疑问.

假设我有两个appender:我希望appender"a"接受只有1或2的标记,但我希望appender"b"接受只有1或3的标记.我应该使用什么类型的过滤器?这有什么事吗?

Uri*_*ter 5

一种选择是使用事件评估器.你也可以编写自己的过滤器; 事实上,内置示例(几乎)可以满足您的需求.

下面的过滤器应该接近你想要的.

import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;

import java.util.ArrayList;
import java.util.List;

public class OneTwoMarkerFilter extends Filter
{
    private final List<Marker> markers = new ArrayList<Marker>();

    public MarkerFilter()
    {
        markers.add(MarkerFactory.getMarker("1"));
        markers.add(MarkerFactory.getMarker("2"));
    }

    @Override
    public FilterReply decide(Object event)
    {
        if (!isStarted())
        {
            return FilterReply.NEUTRAL;
        }

        LoggingEvent logEvent = (LoggingEvent) event;

        Marker eventMarker = logEvent.getMarker();

        if (eventMarker != null && markers.contains(eventMarker))
        {
            return FilterReply.NEUTRAL;
        }
        else
        {
            return FilterReply.DENY;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意我没有测试过这个.