Java日志框架概览
  p2jJh8XzArTU 2023年11月19日 60 0


Java日志框架概览_日志框架

 

SLF4J

  • 提供统一的日志门面API,即图中紫色部分,实现中立的日志记录API
  • 桥接功能,蓝色部分,把各种日志框架API(绿色部分)桥接到SLF4J API。这样即便你的程序中使用各种日志API记录日志,最终都可桥接到SLF4J门面API。
  • 适配功能,红色部分,可实现SLF4J API和实际日志框架(灰色部分)绑定。 SLF4J只是日志标准,还是需要实际日志框架。日志框架本身未实现SLF4J API,所以需前置转换。Logback就是按SLF4J API标准实现,所以才无需绑定模块做转换。

虽然可用log4j-over-slf4j实现Log4j桥接到SLF4J,也可使用slf4j-log4j12实现SLF4J适配到Log4j,也把它们画到了一列,但是它不能同时使用它们,否则就会产生死循环。jcl和jul同理。

虽然图中有4个灰色的日志实现框架,但日常业务使用最多的还是Logback和Log4j,都是同一人开发的。Logback可认为是Log4j改进版,更推荐使用,基本已是主流。

Spring Boot的日志框架也是Logback。那为什么我们没有手动引入Logback包,就可直接使用Logback?

spring-boot-starter模块依赖spring-boot-starter-logging模块 spring-boot-starter-logging模块自动引入logback-classic(包含SLF4J和Logback日志框架)和SLF4J的一些适配器。其中,log4j-to-slf4j用于实现Log4j2 API到SLF4J的桥接,jul-to-slf4j则是实现java.util.logging API到SLF4J的桥接。

logback异步日志配置

<appender name="DEFAULT-APPENDER-ASYNC" class="ch.qos.logback.classic.AsyncAppender">
   <includeCallerData>false</includeCallerData>
   <queueSize>512</queueSize>
   <neverBlock>true</neverBlock>
   <appender-ref ref="DEFAULT-APPENDER" />
</appender>
  • includeCallerData 默认false:方法行号、方法名等信息不显示
  • queueSize 控制阻塞队列大小,使用的ArrayBlockingQueue阻塞队列,默认容量256:内存中最多保存256条日志
  • discardingThreshold 丢弃日志的阈值,为防止队列满后发生阻塞。默认队列剩余容量 < 队列长度的20%,就会丢弃TRACE、DEBUG和INFO级日志
  • neverBlock 控制队列满时,加入的数据是否直接丢弃,不会阻塞等待,默认是false
  • 队列满时:offer不阻塞,而put会阻塞
  • neverBlock为true时,使用offer
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
p2jJh8XzArTU
作者其他文章 更多