【问题标题】:Filter specific log messages using YAML file logging configuration使用 YAML 文件日志配置过滤特定日志消息
【发布时间】:2018-07-26 17:00:01
【问题描述】:

理想情况下,我想通过使用 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>

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

【问题讨论】:

    标签: logging yaml logback dropwizard


    【解决方案1】:

    目前 DropWizard 日志记录不支持 TurboFilter。您需要使用读取 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();
        }
    }
    

    然后你需要在你的配置类上重写“getLoggingFactory”方法:

    public class SOQ48815685Configuration extends Configuration {
    
        @Override
        public synchronized LoggingFactory getLoggingFactory() {
    
            return new SOQ48815685Logging();
        }
    }
    

    【讨论】:

    • 感谢您的回答。假设我只能更改 yaml 文件而不是 API,那么添加特定于记录器的配置以抑制来自不需要的类的日志消息不是更容易吗?像这样的东西` #default log level level: WARN # Logger-specific levels。 loggers: # 将包 'com.test' 的级别设置为 OFF。 com.test: OFF (其余的日志配置) ... `
    • 是的@rk666,这是正确的。您可以使用该方法忽略特定包/类的日志消息。我在以前版本的 DW 中看到了一些问题,尽管官方文档中没有接受该语法。我不得不使用 com.test: level: OFF.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 2019-09-20
    • 2021-03-27
    • 1970-01-01
    • 2019-10-10
    • 2018-12-20
    相关资源
    最近更新 更多