文章目录
- 常用的日志库
- SpringBoot 日志的基本上使用
- 封装日志
- 日志的级别
- 常用日志配置文件
- 使用Lombok打印日志,以及@Slf4j、@Log实现类
常用的日志库
在日常开放中追踪和排查问题,使用System.out.println打印不方便管理,如输出的类,时间等。现主流的日志框架有Log4j、logback、commons logging等。主要分为以下两大类:
日志接口:
Commons Logging ( JCL):Apache推出的日志接口。
SLF4J(Simple Logging Facade for Java):桥接方式对接各种日志实现。
日志实现:
JUL(Java Util Logging):JDK 1.4后内置日志库
Log4j:Apache顶级日志框架,后推出Log4j2被替代
Logback:ceki首创log4j之后,又推出了logback “可靠、通用、快速而又灵活的Java日志框架”,其直接实现了SLF4J
log4j2:Apache参考Logback思路并做出优化,与log4j不兼容。
常用日志框架适配图:
SLF4J:是门面的担当,本质是个空壳,用来适配各种日志。
SpringBoot 日志的基本上使用
SpringBoot默认门面采用:SLF4J,实现采用:logback。
代码如下:
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class TestLog {
private static final Logger log = LoggerFactory.getLogger(TestLog.class);
@Test
public void test(){
log.info(" hello log ! ");
}
}
打印输出:
2022-08-28 21:50:42.757 INFO 2452 --- [ main] com.terry.test.TestLog : hello log !
封装日志
如上代码使用日志,每一个类都需要如下这段代码
private static final Logger log = LoggerFactory.getLogger(TestLog.class);
可通过子类继承父类方式封装,代码如下:
// 封装公共日志类,获取log对象
public static class BaseLog {
Logger log;
public BaseLog(){
Class<? extends BaseLog> aClass = this.getClass();
log = LoggerFactory.getLogger(aClass);
}
}
// 继承父类 直接使用log
@SpringBootTest
public static class BaseLogTest extends BaseLog{
@Test
public void test(){
log.info(" hello base log! ");
}
}
打印如下:
2022-08-28 21:57:54.620 INFO 23264 --- [ main] com.terry.test.TestLog$BaseLogTest : hello base log!
日志的级别
logback中对日志归类了6种级别,从低到高如下:
- trace:默认不打印终端,不输出文件。用于调试
- debug:默认打印终端,不输出文件。用于调试
- info:默认打印终端,输出文件。用于记录程序日志、状态信息
- warning:警告信息。用于记录参数异常
- error:错误信息。用于记录错误,不会导致中断,但是会影响整个流程。
- fatal:遇到了致命错误,必须马上终止程序。
SpringBoot 配置日志级别:
整个应用设置级别:
logging:
level:
root: debug
指定包设置级别:
logging:
level:
com.terry.test: debug
常用日志配置文件
更改打印格式,只打印日期和内容。
logging:
pattern:
console: "%d - %m%n"
2022-08-28 22:22:14,514 - hello log !
设置日志文件
logging:
file:
name: test.log
日志文件按日期和大小分片(开发常用)
logging:
file:
name: test.log
logback:
rollingpolicy:
# 最多七个日志文件
max-history: 7
# 每个文件最大4kb
max-file-size: 4KB
# 按日期打印日志文件
file-name-pattern: test.%d{yyyy-MM-dd}.%i.log
使用Lombok打印日志,以及@Slf4j、@Log实现类
Lombok无需继承类,一个注解即可使用log,代码如下。
@Slf4j
public static class TestSlf4j{
@Test
public void test(){
log.info(" hello Slf4j log! ");
}
}
打印如下:
22:36:14.039 [main] INFO com.terry.test.TestLog$TestSlf4j - hello Slf4j log!
Lombok 常用的日志注解:
@Slf4j:在SpringBoot中使用实现是Logback
@Log:JDK的日志库(Java Util Logging)
还支持注解:@Log4j、@Log4j2、@JBossLog、@CommonsLog