- 背景:
刚学Java的时候、对于程序的所有调试信息。我们都是通过Sysout直接输出到控制台的。针对此问题可能存在以下问题
1、需要删除调试信息的时候 需要修改源码代码。去掉Sysout相关代码。如果哪天需要查看调试信息的时候,又需要加入此代码。
2、针对部署在Tomcat的JAVA应用,也最好不要讲日志直接打印到服务器的控制台。这样会导致catalina.out文件特别大。
- 解决方案
所以我们需要引入日志框架来实现日志打印。日志框架一般具备以下特点:
1、可以方便的打开、或者关闭日志。并且日志按照等级控制。
2、日志可以输出到指定的目录文件,并且可以进行归档。压缩打包。
市面上现在有很多日志框架:如log4j、logback、jul、log4j2等。并且还有一些抽象日志API,它统一定义了日志打印的接口。我们实际编码的过程中都是针对抽象日志API进行编程的。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
这样的我们可以很方便的切换日志实现框架。比如我最开始日志是使用的log4j实现的,后来我要换成logback的话。我只需要导入logback的包以及增加相关配置文件就行了。而不需要再修改代码。
抽象日志API有:JCL(Apache 实现的 common-logging)、SLF4J
实现框架有:log4j、logback、log4j2等
JCL 最后更新在2014年,之后就没有更新了。所以现在主要使用SLF4J来打印日志。
log4j 存在性能问题。并且也很久没有更新了。所以现在主要使用logback、log4j2。这三个日志实现框架,都是同一个作者开发的。
SLF4J的使用:
一个项目中我们会导入其他第三方框架,比如Spring、Mybatis 等。他们使用的抽象日志API可能不一样。我们可以通过以下方式进行整合,通过转换包将其他的日志转为SLF4J。如下图所示