/**
* <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>
*/
public class Logging {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(Logging.class);
logger.info("hello");
}
}