1.目前市面上的日志框架与选择
日志门面 (日志的抽象层) | 选择/不选择理由 | 日志实现 | 选择/不选择理由 |
---|---|---|---|
最后一次更新在2014年 | 性能问题 ,不如Logback | ||
SLF4j(Simple Logging Facade for Java) | 选择 | java自带的 | |
需要特定的框架 | 适配性强但是目前还不通用 | ||
- | Logback | Log4j的升级版,选择 |
通常是左边选择一个门面(抽象层)、右边选择一个实现。
SpringBoot:底层是Spring框架,Spring默认使用JCL;
SpringBoot选用SLF4j和Logback。
2.SLF4j使用原理
日志记录方法的调用,不应该直接调用日志的实现类,而应该调用日志的抽象层里的方法;
给系统里倒入slf4j的jar和logback的实现jar
SLF4j用户手册
//slf4j简单实现
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");
}
}
SLF4j通用日志实现原理:
对于其他日志框架SLF4j也可以兼容,通过使用适配层[adaptation layer]上边实现了SLF4j的接口,但是需要实现方法的时候通过适配层来调用其他框架的方法。每个日志都有自己的配置文件,使用SLF4j后,配置文件还是使用日志实现框架本身的配置文件
3.其他日志框架的遗留问题
工作场景中经常使用到别的框架,所以统一日志记录,也就是所谓的别的框架和我一起使用slf4j进行输出,方法如下图:
例如本来我框架中使用了Commons logging API的框架,但是现在需要使用SLF4J API统一输出。
1.需要排除掉Commons logging的jar包
2.然后倒入jcl-over-slf4j.jar包(中间包)
3.导入slf4j的其他实现
而Commons logging包中的方法jcl-over-slf4j都有,这样项目中使用的时候就不会报错了。
4.日志使用
4.1 SpirngBoot默认配置
SpringBoot默认配置了日志
//记录器
Logger logger = LoggerFactory.getLogger(XXXX.class);
//日志的级别 由低到高 trace<debug<info<warn<error
//轨迹信息
logger.trace("");
//调试信息
logger.debug("");
//自定义信息
logger.info("");
//警告信息
logger.warn("");
//错误信息
logger.error("");
日志的级别 由低到高 trace<debug<info<warn<error
SpringBoot默认是使用info级别的,我们也可以调整日志的输出级别,在application.properties中设置
//所要设置打印日志的包名 例如ywz
//只打印debug之下的日志
logging.level.com.ywz=debug
日志打印输出成log文件
//设置日志打印输出文件,如果不设置则只打印在控制台输出
logging.file=srpingboot.log
//设置输出的地址默认是在当前项目下输出
logging.file=D:/srpingboot.log
日志打印输出地址(注意:如果在logging.file中设置了文件输出地址,则logging.path无效)
//spring中设置日志输出地址
//在当前磁盘的根路径下创建spring文件夹和里面的log文件夹,spring.log为默认文件
logging.path=/srpingboot/logs
5.定义自己的Log配置文件
给类路径下放上每个日志框架自己的配置文件,spring则不会使用默认的配置。例如使用Logback日志框架,则在类路径中放一个logback-spring.xml/logback.xml文件。
Logging System | Customization |
---|---|
Logback | logback-spirng.xml(推荐,带上扩展名可以使用spring高级功能),logback-spring.groovy,logback.xml,OR Logback.grovvy |
Log4j2 | log4j2-spring.xml OR log4j2.xml |
JDK(Java Util Logging) | logging.properties |
logback.xml:直接被日志框架识别
logback-spring.xml:日志框架不直接识别加载日志的配置项,由SpringBoot
<spirngProfile name="dev">
//可以指定某段配置只在某个环境下生效
</springProfile>