使用YAML文件日志记录配置筛选特定日志消息

时间:2018-02-15 20:25:19

标签: logging yaml logback dropwizard

理想情况下,我希望使用YAML日志记录配置来防止重复的日志消息。类似于logback中的TurboFilter类

https://logback.qos.ch/manual/filters.html#TurboFilter

<configuration> 
    <turboFilter 
      class="ch.qos.logback.classic.turbo.DuplicateMessageFilter">
        <AllowedRepetitions>2</AllowedRepetitions>
    </turboFilter>
</configuration>

如果不可能,我想抑制/过滤/重定向来自一个特定类的日志消息,或者将包含特定字符串的消息记录到文件位置。

1 个答案:

答案 0 :(得分:0)

目前DropWizard日志记录不支持TurboFilters。您需要使用读取Logback配置文件的自定义文件覆盖LoggingFactory,然后您可以配置所需的任何内容。我使用这种方法创建了一个简单的DW project,但基本上你需要像这样实现一个LoggingFactory:

public class SOQ48815685Logging implements LoggingFactory {

    @JsonIgnore
    private LoggerContext loggerContext;

    @JsonIgnore
    private final ContextInitializer contextInitializer;

    public SOQ48815685Logging() {

        this.loggerContext = LoggingUtil.getLoggerContext();

        this.contextInitializer = new ContextInitializer(loggerContext);
    }

    @Override
    public void configure(MetricRegistry metricRegistry, String name) {

        try {

            contextInitializer.autoConfig();

        } catch (JoranException e) {

            throw new RuntimeException(e);
        }
    }

    @Override
    public void stop() {

        loggerContext.stop();
    }

    @Override
    public void reset() {

        loggerContext.reset();
    }
}

然后你需要覆盖&#34; getLoggingFactory&#34; Configuration类上的方法:

public class SOQ48815685Configuration extends Configuration {

    @Override
    public synchronized LoggingFactory getLoggingFactory() {

        return new SOQ48815685Logging();
    }
}