/**
* <pre>
* JCL,SLF4j: 日志的抽象层,也叫日志门面
* Log4j,JUL,Log4j2,Logback: 日志的具体实现
*
* 在Spring中,默认的日志抽象是JCL
* 在SpringBoot中,默认的日志抽象是SLF4J + Logback
*
*
* 日志的使用和依赖选择: 以使用SLF4j日志门面为例
* 需要调用日志抽象层的方法,而不是具体实现的方法
*
* 1. SLF4j -> 只导入slf4j-api抽象层API -> 日志输出到/dev/null的位置,并提示No SLF4J providers were found,没收找到对应的日志实现
*
*
* 2. SLF4j + Logback
*
* SLF4j -> 导入slf4j-api抽象层API(可省略,因为具体实现依赖该API,所以会自动引入进来) -> 导入logback的实现: logback-classic
*
* 总结: SLF4j + logback 只需要添加"logback-classic"依赖 implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.5.0'
*
*
* 3. SLF4j + log4j
* 由于log4j出现的比SLF4j门面还早,所以不可能直接能实现该日志抽象,所以需要一层适配层,上到SLF4j,下到log4j实现
*
* SLF4j -> 导入slf4j-api抽象层API(可省略,因为具体实现依赖该API,所以会自动引入进来) -> 导入slf4f-log4j的适配层: slf4j-log4j12 -> 适配层自动添加log4j依赖
*
* -> 输出日志提示:No appenders could be found for logger,Please initialize the log4j system properly
*
* -> 表示没有找到配置文件,添加log4j的配置文件
*
* 总结: SLF4j + log4j 只需要添加"slf4j-log4j12"依赖 implementation group: 'org.slf4j', name: 'slf4j-log4j12', version: '2.0.0'
*
*
* 4. SLF4j + JUL
*
* 由于java.util.logging也没有考虑SLF4j,所以也需要适配层
*
* SLF4j -> 导入slf4j-api抽象层API(可省略,因为具体实现依赖该API,所以会自动引入进来) -> 导入slf4f-log4j的适配层: slf4j-jdk14 -> 因为是JDK提供的,所以可以直接打印
*
* 总结: SLF4j + jul 只需要添加"slf4j-jdk14"依赖 implementation group: 'org.slf4j', name: 'slf4j-jdk14', version: '2.0.0'
*
*
* 5. SLF4j + 默认实现
*
* SLF4j -> 导入slf4j-api抽象层API -> 导入默认实现依赖:slf4j-simple
*
* 总结: SLF4j + jul 只需要添加"slf4j-jdk14"依赖 implementation group: 'org.slf4j', name: 'slf4j-simple', version: '2.0.0'
*
* 6. 大总结
* 所有的配置文件都是使用具体实现对应的配置文件,如何配置在官方可以查找
* </pre>
*
* <pre>
* 不同的框架使用的日志显示不同,如何做到所有的日志实现统一呢?
* 1. 对于JCL日志门面,使用jcl-over-slf4j进行替换,将框架中的JCL依赖排除,添加jcl-over-slf4j覆盖依赖
* implementation group: 'org.slf4j', name: 'jcl-over-slf4j', version: '2.0.0'
* 2. 对于Log4j日志实现,使用log4j-over-slf4j进行替换,将框架中的Log4j依赖排除,添加log4j-over-slf4j覆盖依赖
* implementation group: 'org.slf4j', name: 'log4j-over-slf4j', version: '2.0.0'
* 3. 对于JUL日志实现,使用jul-to-slf4j进行替换,将框架中的jul依赖排除,添加jul-to-slf4j覆盖依赖
* implementation group: 'org.slf4j', name: 'jul-to-slf4j', version: '2.0.0'
* </pre>
*
*
* <pre>
* 对于SpringBoot的日志依赖,就做到了对不同的框架使用的日志实现,原理就是导入了一些对不同实现替换的包
* 并且底层是使用SLF4j+logback的组合完成日志实现,以下是它的核心依赖
* <dependency>
* <groupId>org.springframework.boot</groupId>
* <artifactId>spring-boot-starter-logging</artifactId>
* </dependency>
* </pre>
*
* <pre>
* 在springboot中如何配置日志信息
* # 配置日志级别
* # 配置日志级别
* logging:
* level:
* # 包名: 级别
* luck.springboot: debug
* # 指定日志系统的配置文件路径
* config: classpath:logging/logback-spring.xml
* # 指定日志文件的位置
* file:
* # 日志文件名称,默认在当前项目的根路径,默认为spring.log
* # 可以直接写全路径
* name: luck.log
* # name和path同时配置,path失效,默认在当前项目的根路径
* path: logs
* pattern:
* # 控制台日志格式
* console: console==> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
* # 文件日志格式
* file: file==> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
* # 日志的日期格式,如果设置了console,file则会覆盖
* dateformat: yyyy-MM-dd
* # 日志级别输出格式
* # level: debug
* # 指定logback配置文件路径
* config: classpath:logging/logback.xml
* # 默认的配置都在spring-boot-2.7.0.jar!\org\springframework\boot\logging
* # springProfile: 只有在xxx-spring.xml配置文件,支持按照不同环境进行隔离
*
* </pre>
*/
public class Logging {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(Logging.class);
logger.info("hello");
}
}
SpringBoot日志概念总结
于 2024-04-18 16:08:41 首次发布
本文讲述了在Spring和SpringBoot项目中,如何选择和配置SLF4j(包括SLF4j+Logback、SLF4j+Log4j、SLF4j+JUL)的日志系统,以及如何统一不同框架的日志实现。着重介绍了各个适配层的作用和依赖管理方法。
1033

被折叠的 条评论
为什么被折叠?



