SLF4J和LogBack

SLF4J

SLF4J 简介

SLF4J\] Simple Logging Facade for Java (https://www.slf4j.org/) The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time. ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1916be746b3a4e80b5b3138c13f2419a.jpeg) 通过上面的图可以看出: \[✅\] commons-logging和slf4j都是日志的接口,而没有提供实现; \[✅\] log4j,Java.logging,logback等等才是日志的真正实现; \[✅\] 接口的工厂会自动寻找具体的实现,返回一个实现服务,这些过程都是透明化,用户不需要进行任何操作,至于用commons-logging还是slf4j由客户决定。 ##### Commons Logging * apache提供通用的日志接口,Simple logger的简单实现,但是它功能很弱; * Simple logger的简单实现,Commons Logging定义了一个自己的接org.apache.commons.logging.Log,用来屏蔽不同日志框架的API差异。 ##### SLF4J * SLF4J不依赖于任何特殊的类装载机制,实际上,每个SLF4J绑定在编译时都是硬连线的,以使用一个且只有一个特定的日志记录框架。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d4235f8779bc4e1abde5104b86b626a1.png) The SLF4J interfaces and their various adapters are extremely simple. Most developers familiar with the Java language should be able to read and fully understand the code in less than one hour. No knowledge of class loaders is necessary as SLF4J does not make use nor does it directly access any class loaders. As a consequence, SLF4J suffers from none of the class loader problems or memory leaks observed with Jakarta Commons Logging (JCL) also called Apache Commons Logging. ##### logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站\[http://logback.qos.ch\]。Architecture它当前分为下面下个模块: * logback-core:其它两个模块的基础模块 * logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging * logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能. ###### logback取代log4j的理由 * Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。而且logback不 仅性能提升了,初始化内存加载也更小了; * 充分的测试:Logback经过了反复的测试。Logback的测试完全不同级别的; * 文档详细; * 自动去除旧的日志文件:通过设置TimeBasedRollingPolicy或SizeAndTimeBasedFNATP的maxHistory属性,你可以控制已经产生日志文件的最大数量。如果设置maxHistory=12,那些log文件超过12个月的都会被自动移除; * 更合理的个性的配置; * ... ###### logback的配置介绍 * Logger、Appender及Layout Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。 Appender主要用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、MySQL、PostreSQL、 Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。 Layout 负责把事件转换成字符串,格式化的日志信息的输出. * logger context 各个logger 都被关联到一个 LoggerContext,LoggerContext负责制造logger,也负责以树结构排列各logger。其他所有logger也通过org.slf4j.LoggerFactory 类的静态方法getLogger取得。 getLogger方法以 logger名称为参数。用同一名字调用LoggerFactory.getLogger 方法所得到的永远都是同一个logger对象的引用。 * 有效级别及级别的继承 Logger 可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于ch.qos.logback.classic.Level类。如果 logger没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别。root logger 默认级别是 DEBUG。 * 打印方法与基本的选择规则 打印方法决定记录请求的级别。例如,如果 L 是一个 logger 实例,那么,语句 L.info("...")是一条级别为 INFO的记录语句。记录请求的级别在高于或等于其 logger 的有效级别时被称为被启用,否则,称为被禁用。记录请求级别为 p,其 logger的有效级别为 q,只有则当 p\>=q时,该请求才会被执行。该规则是 logback 的核心。级别排序为: TRACE \< DEBUG \< INFO \< WARN \< ERROR ###### logback的默认配置 如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurator ,创建一个最小化配置。最小化配置由一个关联到根 logger 的ConsoleAppender组成。输出用模式为%d{HH:mm:ss.SSS} \[%thread\] %-5level %logger{36} - %msg%n 的PatternLayoutEncoder 进行格式化。root logger 默认级别是 DEBUG。 * Logback的配置文件 Logback 配置文件的语法非常灵活。正因为灵活,所以无法用 DTD 或 XML schema 进行定义。尽管如此,可以这样描述配置文件的基本结构:以开头,后面有零个或多个元素,有零个或多个元素,有最多一个元素。 * Logback默认配置的步骤 1. 尝试在 classpath下查找文件logback-test.xml; 2. 如果文件不存在,则查找文件logback.xml; 3. 如果两个文件都不存在,logback用BasicConfigurator自动对自己进行配置,这会导致记录输出到控制台。 ###### logback配置详解 1. 根节点,包含下面三个属性: * scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. * scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟. * debug: 当属性设置为true,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 ... 注意:如果未指定时间单位,则时间单位将被假定未毫秒,这通常是不合适的,如果您更改了默认扫描周期,请不要忘记指定时间单位。 2. 子节点:用来设置上下文名称,每个logger都关联到logger上下文,默认上下文名称为default。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。 myAppName 3. 子节点:用来定义变量值,它有两个属性name和value,通过定义的值会被插入到logger上下文中,可以使"${}"来使用变量。 ${APP_Name} 4. 子节点:获取时间戳字符串,他有两个属性key和datePattern key: 标识此的名字 datePattern: 设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式。 ${bySecond} 5. 子节点:负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名。 [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] [%logger{40}:%line] - %msg%n 5.2 FileAppender:把日志添加到文件,有以下子节点 被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创 建,没有默认值。 如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。 对记录事件进行格式化。 如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写 入操作,效率低,默认是 false。 testFile.log true %-4relative [%thread] %-5level %logger{35} - %msg%n 5.3 RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。有以下子节点: 被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创 建,没有默认值。 如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true 当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类。 logFile.%d{yyyy-MM-dd}.log 30 %-4relative [%thread] %-5level %logger{35} - %msg%n

相关推荐
练习时长一年6 天前
logback-spring.xml 文件
xml·spring·logback
EumenidesJ1 个月前
Java常用日志框架介绍
java·log4j·logback·slf4j
躲在没风的地方1 个月前
logback日志控制服务器日志输出
java·服务器·logback
ta叫我小白1 个月前
Spring Boot 设置滚动日志logback
java·spring boot·spring·logback
代码的余温2 个月前
Spring Boot集成Logback日志全攻略
xml·spring boot·logback
代码的余温2 个月前
Logback.xml配置详解与实战指南
xml·logback
清风92002 个月前
Logback——日志技术(基础)
java·前端·logback