Dropwizard日志配置未生效求助:仅控制台输出全级别日志
解决Dropwizard 1.0.5日志过滤不生效的问题
兄弟,我之前在Dropwizard 1.x版本也踩过日志过滤的坑,折腾了好一阵才搞定。你要只输出自有代码的日志到控制台,过滤掉框架那些冗余日志,试试下面这几个配置方案,应该能解决你的问题:
核心配置方案:精准控制日志来源
Dropwizard 1.x基于Logback实现日志功能,我们可以通过调整logging配置块,拉高根日志级别,再单独给自有代码包开放低级别日志,同时关闭日志传递避免重复输出。
在你的config.yml里修改日志配置:
logging: # 只保留控制台输出,移除所有文件类appender appenders: - type: console # 控制台默认输出门槛设为INFO,先过滤框架的DEBUG级冗余日志 threshold: INFO # 可选:自定义日志格式,方便快速定位自有代码日志 logFormat: "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" # 重点配置日志记录器 loggers: # 替换成你的自有代码根包路径,比如com.yourteam.yourapp com.yourteam.yourapp: level: DEBUG # 这里设成你需要的级别(DEBUG/INFO都可) additivity: false # 关键!禁止自有代码日志传递给根日志器,避免重复输出 # 可选:把常见第三方框架的日志级别调至WARN/ERROR,进一步减少冗余 org.eclipse.jetty: WARN io.dropwizard: WARN com.fasterxml.jackson: WARN org.hibernate: WARN
关键参数解释
additivity: false:很多人会忽略这个参数,如果不设为false,自有代码日志会先被自定义logger处理,再传给根logger,导致同一条日志输出两次,而且根logger的级别门槛会覆盖你的配置。threshold: INFO:控制台appender只接收INFO及以上级别的日志,框架的DEBUG日志直接被过滤,而自有代码包的DEBUG日志因为单独配置了权限,会正常输出。
进阶方案:更精细的日志过滤
如果需要按日志内容或特定标记过滤,可以用Dropwizard支持的Logback过滤器。比如只输出包含特定关键词的日志,或者只保留某个子包的日志:
logging: appenders: - type: console logFormat: "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" filters: # 按日志内容正则匹配,只保留包含"business-log"的日志 - type: regex regex: "^.*business-log.*$" onMatch: ACCEPT onMismatch: DENY # 或者按logger名称精确过滤,只保留指定子包的日志 - type: logger loggerName: com.yourteam.yourapp.service onMatch: ACCEPT onMismatch: DENY
常见坑点排查
- 检查多appender配置:确保你的配置里只有
console类型的appender,不要保留file或其他类型,不然日志会输出到多个地方。 - 确认包路径正确:自定义logger的包路径一定要准确,比如你的代码在
com.yourteam.yourapp.controller下,就用com.yourteam.yourapp作为根包,不要写错。 - 重启应用生效:Dropwizard的日志配置修改后需要重启应用才能生效,热重载一般不支持日志配置的变更。
内容的提问来源于stack exchange,提问作者tam
相关产品推荐
相关产品推荐

