【问题标题】:How to log logs with different log levels to different files in Dropwizard?如何将不同日志级别的日志记录到 Dropwizard 中的不同文件中?
【发布时间】:2020-12-25 15:32:29
【问题描述】:

所以基本上我想做的是记录具有不同日志级别的日志,例如 INFO DEBUG WARN 等 到不同的日志文件。

我为 slf4j here 找到了类似的东西,但 dropwizard 使用 logback 作为日志框架。

谁能告诉我如何在 dropwizard 中使用 logback 进行操作?我应该对我的 conifg.yml 文件进行哪些更改?

 level: INFO
  loggers:
    "io.dropwizard": INFO
    "org.hibernate.SQL":
      level: DEBUG
      additive: false
      appenders:
        - type: file
          currentLogFilename: /var/log/myapplication-sql.log
          archivedLogFilenamePattern: /var/log/myapplication-sql-%d.log.gz
          archivedFileCount: 5

【问题讨论】:

    标签: logging logback slf4j dropwizard


    【解决方案1】:

    这是你需要做的:

    1. 为自定义 logback 过滤器实现或查找一些现有代码。
      以下是仅传递 ERROR 级别消息的过滤器示例:
    package foo;
    
    import ch.qos.logback.classic.Level;
    import ch.qos.logback.classic.spi.ILoggingEvent;
    import ch.qos.logback.core.filter.Filter;
    import ch.qos.logback.core.spi.FilterReply;
    import com.fasterxml.jackson.annotation.JsonTypeName;
    import io.dropwizard.logging.filter.FilterFactory;
    
    @JsonTypeName("errors-only")
    public class ErrorsOnlyFilterFactory implements FilterFactory<ILoggingEvent> {
        @Override
        public Filter<ILoggingEvent> build() {
            return new Filter<>() {
                @Override
                public FilterReply decide(ILoggingEvent event) {
                    return event.getLevel() == Level.ERROR ?
                            FilterReply.ACCEPT :
                            FilterReply.DENY;
                }
            };
        }
    }
    
    1. 创建文件
      &lt;resources&gt;/META-INF/services/io.dropwizard.logging.filter.FilterFactory
      并用过滤器类名填充它。对于我的示例,文件仅包含一行:
    foo.ErrorsOnlyFilterFactory
    
    1. filterFactories/type 下将@JsonTypeName 注释的值添加到appender 配置(注意:type 是一个数组,因此您可以根据需要为每个appender 指定多个过滤器):
    logging:
      appenders:
        - type: file
          currentLogFilename: errors.log
          ...
          filterFactories:
            - type: errors-only
    

    对于您要单独记录的每个日志记录级别,您应该:

    • 创建新的过滤器类
    • 将新行添加到META-INF/services/io.dropwizard.logging.filter.FilterFactory
    • 添加新的 appender 配置

    【讨论】:

      猜你喜欢
      • 2022-10-14
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 2013-03-26
      相关资源
      最近更新 更多