自定义日志
导入的是slf4j的Logger类
java
package app.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
@RestController
public class TestController {
// 得到日志对象
private static Logger logger = LoggerFactory.getLogger(TestController.class);
@GetMapping("/log")
public void getLog() {
logger.info("Customer log");
}
}
运行效果
设置日志级别
日志级别(低->高):trace->debug->info->warn->error
Spring中默认级别: info
root: warn解释:如果SpringBoot中没有为特定的包设置日志级别那么就会使用warn作为默认的日志级别
当设置为warn之后,控制台只会输出大于等于warn级别的日志信息
日志持久化
日志不会覆盖而是追加的方式添加,日志文件太大的时候会自动分割
yaml
# 设置路径
logging:
file:
path: D:\100.Documents\200.IntelliJIDEA\projects\spring_study\springboot-demo1\src\main\resources\static
yaml
# 设置名称
logging:
file:
name: springboot.log
结合lombok使用@Slf4j快速添加日志
这些日志会发现每次在使用的时候需要填写对应的类信息才行
java
private static Logger logger = LoggerFactory.getLogger(LogController.class);
lombok可以省略掉这一步,哪一个类运行就获取哪一个类的字节码
对比 getLog2 可以更简洁的输出日志
java
package app.controller;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class LogController {
//1.得到日志对象
private static Logger logger = LoggerFactory.getLogger(LogController.class);
@GetMapping("/log1")
public void getLog1() {
logger.trace("trace");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
@GetMapping("/log2")
public void getLog2() {
log.trace("trace");
log.debug("debug");
log.info("info");
log.warn("warn");
log.error("error");
}
}
查看字节码文件会发现@Slf4j的运行原理
说明程序是在编译期自动添加的这一行代码,包括lombok的@Data注解也会自动生成getter、setter、equals、canEqual、hashCode、toString方法都是在编译期生成的代码