首页 > 编程语言 >Java日志框架概览

Java日志框架概览

时间:2023-11-10 13:05:35浏览次数:36  
标签:Java 框架 队列 概览 SLF4J API 日志 Logback


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

标签:Java,框架,队列,概览,SLF4J,API,日志,Logback
From: https://blog.51cto.com/u_16225007/8296006

相关文章

  • JavaScript的BOM和document编程方法汇总和实例-----前端
    //总结浏览器往服务器发请求          //表单,超链接          //document.location文本重定向          //window.location窗口重定向          //window.open()请求地址       ......
  • JavaSE(十八)-迭代器Iterator
    文章目录1.引言2.Iterable3.Iterator4.迭代器遍历5.并发修改异常5.List特有的迭代器ListIterator5.1.特有的方法6.增强for循环1.引言为了方便的处理集合中的元素,Java中出现了一个对象,该对象提供了一些方法专门处理集合中的元素.例如删除和获取集合中的元素.该对象就叫做迭代器(......
  • JavaSE(十六)-集合Collection
    文章目录1.集合Collection1.1.集合的概念1.2.集合和数组的区别1.3.集合家族1.4.什么时候用什么样的集合2.Collection接口2.1.Collection接口概述2.2.学习集合对象2.1.Collection接口的共性方法2.1.1.增加2.1.2.删除2.1.3.修改2.1.4.判断2.1.5.获取2.1.6.练习:集合中添加自定义......
  • JavaSE(十二)-Object类
    文章目录1.Object类2.Object类常用方法2.1.equals方法3.==和equals的区别3.1.==3.2.equals()方法的使用4.toString方法5.hashCode()方法1.Object类在JDK中提供一个Object类,它是类层次结构的根类,每个类都直接或间接基础自该类,所有对象(包括数组)都实现了这个类的方法。如果......
  • JavaSE(三十一)-IO流--PrintWriter类
    文章目录1.常用的构造方法2.常用方法3.PrintWriter和BufferedWriter的使用区别java.io.PrintWriter是java中很常见的一个类,该类可用来创建一个文件并向文本文件写入数据。可以理解为java中的文件输出,java中的文件输入则是java.io.File。1.常用的构造方法1)构造方法参数为String......
  • java怎么实现对指定进行多线程访问的效果
    要使用Java实现对特定网站(例如"http://xkrj5.com")的多线程访问,你可以采用以下步骤:创建一个线程类:这个类将负责执行HTTP请求。使用线程池:这可以更有效地管理多个线程。执行HTTP请求:使用Java的网络库(如 HttpURLConnection 或第三方库如ApacheHttpClient)。下面是......
  • 每天5道Java面试题(第7天)
    1. Files的常用方法都有哪些?Files.exists():检测文件路径是否存在。Files.createFile():创建文件。Files.createDirectory():创建文件夹。Files.delete():删除一个文件或目录。Files.copy():复制文件。Files.move():移动文件。Files.size():查看文件个数。Files.read():读取文件。......
  • java: 执行Linux命令,获取结果
    packagecom.css.k3.k3xk.action;importjava.io.BufferedReader;importjava.io.InputStreamReader;publicclassMyCommandExecutor{publicstaticStringexecuteCommand(Stringcommand,Stringparameter){Stringresult=null;try{......
  • Java实现两字符串相似度算法
    1、编辑距离编辑距离:是衡量两个字符串之间差异的度量,它表示将一个字符串转换为另一个字符串所需的最少编辑操作次数(插入、删除、替换)。2、相似度计算方法可以有多种,其中一种常见的方法是将编辑距离归一化为0到1之间的范围(归一化编辑距离(NormalizedEditDistance)),将编辑距离除以......
  • Java起源
    sun公司诞生sun初始的全名是“斯坦福大学网络”,它崛起于1982年的斯坦福大学校园的几个校友之手。sun公司1986年上市,它曾经在硅谷确立了与微软,惠普,思科一样的江湖地位2009年4月21日,甲骨文以74亿美元收购sunJava的前身1991年sun公司发起了一个绿色计划,由詹姆斯高斯林领导这个计......