日志系统学习和使用: Log4j + SLF4J + Logback
📌03、日志系统学习和使用: Log4j + SLF4J + Logback
- 1、基础概念理解
- 1、Commons Logging定义了6个日志级别:
- TRACE < DEBUG < INFO(默认) < WARN < ERROR < FATAL
- 2、配置日志级别是什么?
- 即配置系统的最低(最小)输出日志级别。比这个级别高的会输出,低的不会输出。
- 并且,Java的默认级别是INFO。(不进行配置则默认是INFO)
- 1、Commons Logging定义了6个日志级别:
- 2、日志系统的发展,以及使用(JDK Logging + Commons Logging + Log4j + SLF4J和Logback)
[参考: 使用Log4j - 廖雪峰的官方网站 https://www.liaoxuefeng.com/wiki/1252599548343744/1264739436350112 ]- 关于日志接口和日志实现
- 日志接口:Commons Logging + SLF4J
- 代码中方便使用的部分(方便调用)
- 日志实现:JDK Logging + Log4j + Logback
- 实际输出日志的部分
- 日志接口:Commons Logging + SLF4J
- 1、先说JDK Logging
- Java内置的日志实现,最基础的。
- 但是因为配置不方便,导致使用的较少。
- 2、再说Commons Logging + Log4j
- Commons Logging 是日志接口,意味着他可以对接不同的日志实现(特色)。比如:Log4j。
- 默认情况下,Commons Loggin自动搜索并使用Log4j(Log4j是另一个流行的日志系统),如果没有找到Log4j,再使用JDK Logging。
- Log4j 的配置模板
- Commons Logging 是日志接口,意味着他可以对接不同的日志实现(特色)。比如:Log4j。
- 3、最后说 SLF4J和Logback
- SLF4J类似于Commons Logging,也是一个日志接口,而Logback类似于Log4j,是一个日志的实现。
- 为什么出现?
- 因为对Commons Logging的接口不满意,有人就搞了SLF4J。
- SLF4J 接口支持更好的字符串拼接
- 因为对Log4j的性能不满意,有人就搞了Logback。
- 因为对Commons Logging的接口不满意,有人就搞了SLF4J。
- SLF4J 的配置模板
- 关于日志接口和日志实现
- 3、日志通用元素:Appenders + Logger + Root
- 1、通用元素:
- Logger
- 主要控制日志输出级别(和Root类似),以及输出位置(和Appenders关联)。
- 和ROOT的不同在于,Logger可以对不同包、不同类进行特定的配置。而ROOT是面向所有代码的。
- Appenders
- 控制日志输出位置、格式、文件大小、清理方式等等。也可以自己过滤级别。
- Root
- 表示根节点。其配置对所有的日志输出都生效,即一个文件如果匹配到ROOT。那么,就会输出到ROOT中配置的所有Appenders。
- Logger
- 2、Logger 和 Appenders 的实际使用说明 + 继承关系
- 例:
- 对一个Java类来说,它会先根据Logger和Root进行匹配,并根据日志级别进行过滤,来获取当前文件可以对应的Appenders。
- 然后,它再匹配相关的Appenders,来确定日志的打印样式和位置等等。
- 注:一个Java类可以匹配多个Appenders。就会输出到不同的地方。
- Logger和Root的关系与区别(对应到Appenders上)
- 作用上:
- Logger和Root的作用一致,都是和Appenders进行关联,控制日志输出对应的Appenders
- 区别:
- Root对所有文件都生效,Logger只对符合其规则的文件生效。
- 疑问?
- 1、Root和Logger会同时生效么?
- 会的。除非在Logger节点上配置属性:additivity="false",屏蔽Root(以及父级的生效)的生效
- 2、如果1个类匹配到多个Logger(父级嵌套),会将匹配到的所有Logger中的Appenders都输出么?(即会重复输出么?)
- 会的。这个问题本质和Root一致,因为Root是所有Logger的父级。解决同ROOT。
- 1、Root和Logger会同时生效么?
- 作用上:
- 例:
- 1、通用元素:
- 4、END

浙公网安备 33010602011771号