SpringBoot日志概念总结

本文讲述了在Spring和SpringBoot项目中,如何选择和配置SLF4j(包括SLF4j+Logback、SLF4j+Log4j、SLF4j+JUL)的日志系统,以及如何统一不同框架的日志实现。着重介绍了各个适配层的作用和依赖管理方法。
摘要由CSDN通过智能技术生成
/**
 * <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");
    }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值