SLF4j日志
日志可以用于在程序执行过程中,向控制台或文件或数据库等位置输出一些自定义的信息。
注意:在开发实践中,不要在src/main/java
下的任何类中使用System.out.println()
的方式进行输出,除非你确定这些信息是一定要被任何人都可以看到的!
在spring-boot-starter
(此依赖项是几乎所有带有spring-boot-starter
依赖项的子级依赖)的依赖项中,默认已经集成了SLF4j日志框架。
日志是有显示级别的,根据日志信息的重要程度,从低到高分别是:
trace
:跟踪信息debug
:调试信息info
:一般信息warn
:警告信息error
:错误信息
默认的显示级别是info
,则只会显示此级别及更重要的日志信息。
在Spring Boot项目的application.properties
中,可以添加配置,以指定日志的显示级别:
logging.level.包名=日志的显示级别
例如,可以配置为:
logging.level.cn.tedu.csmall.product=info
在添加了Lombok
框架的Spring Boot项目中,可以在任何类上添加@Slf4j
注解,则在当前类中就可以使用名为log
的变量来调用方法,实现日志的输出,例如:
@Slf4j
@SpringBootTest
public class Slf4jTests {
@Test
void testSlf4j() {
log.trace("这是一条【trace】级别的日志");
log.debug("这是一条【debug】级别的日志");
log.info("这是一条【info】级别的日志");
log.warn("这是一条【warn】级别的日志");
log.error("这是一条【error】级别的日志");
}
}
可以看到,log
变量可以调用trace()
、debug()
、info()
、warn()
、error()
方法,将输出对应级别的日志。
各级别的方法均重载了多次,通常使用的方法是:
trace(String message)
trace(String message, Object... args)
提示:其它各级别的方法也有以上方式的重载。
使用以上第2个方法时,可以在第1个参数的字符串中使用{}
作为占位符,表示某变量,然后,从第2个参数开始,依次表示各{}
占位符对应的值即可,例如:
@Test
void testSlf4j() {
int a = 1;
int b = 2;
log.debug("a=" + a + ", b=" + b + ", a+b=" + (a + b));
log.debug("a={}, b={}, a+b={}", a, b, a + b);
}
另外,使用trace(String message, Object... args)
这类方法来输出日志时,日志框架会对第1个参数String message
进行缓存,执行效率远高于使用System.out.println()
且拼接字符串的效果。