如何将具有不同日志级别的日志记录到Dropwizard中的不同文件中?

问题描述

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

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

有人可以告诉我如何在带向导的dropwizard中执行此操作吗?我应该对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

解决方法

这是您需要做的:

  1. 实现或找到一些用于自定义登录过滤器的现有代码。
    这是仅传递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. 创建文件
    <resources>/META-INF/services/io.dropwizard.logging.filter.FilterFactory
    并使用过滤器类名称填充它。在我的示例中,文件仅包含一行:
foo.ErrorsOnlyFilterFactory
  1. @JsonTypeName下将filterFactories/type批注的值添加到附加程序配置中(注意:type是一个数组,因此您可以为每个附加程序指定多个过滤器):
logging:
  appenders:
    - type: file
      currentLogFilename: errors.log
      ...
      filterFactories:
        - type: errors-only

对于要分别记录的每个记录级别,您应该:

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...