springboot中使用logback记录日志
日志级别
四个常用的日志级别,由高到低依次如下:
- ERROR:记录错误信息
- WARNING:记录程序运行过程中的潜在问题
- INFO:程序正常执行记录的信息
- DEBUG:调试程序记录的详细信息
如果日志级别为DEBUG,那么低于DEBUG级别的日志将不会输出,以此类推。
logback配置及使用
logback是一个日志框架(https://logback.qos.ch/index.html),官网描述为“流行框架log4j的后继者”,spring-boot-starter-parent依赖中已经包含了所需的依赖,直接配置即可使用。
logback配置文件如下,都有注释。
<?xml version="1.0" encoding="UTF-8"?>
<!--定期检查配置文件如发生更改则重新加载,scanPeriod 为检查配置文件的周期-->
<configuration scan="true" scanPeriod="10 seconds">
<!--日志输出策略,name 表示策略名称,class为策略类型ConsoleAppender表示输出到控制台-->
<appender name="CONSOLE"
class="ch.qos.logback.core.ConsoleAppender">
<!--非必须,指定appender的过滤级别-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<!--日志信息格式-->
<!--%date 时间;%-5level日志级别,左对齐一共占5位;%logger{60} 日志所在类;%msg日志信息;%n换一行-->
<pattern>%date [%-5level] %logger{60} %msg%n</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--日志输出策略,name 表示策略名称,class为策略类型RollingFileAppender表示输出文件-->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志文件的输出路径及文件名-->
<File>D:/log/app.log</File>
<encoder>
<pattern>%date [%-5level] %logger{60} %msg%n</pattern>
</encoder>
<!--日志的分割策略,TimeBasedRollingPolicy 表示按天分割-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--分割后的日志文件名-->
<fileNamePattern>D:/log/app.log.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保留 30 天日志 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!--指定某一个包或类的日志输出,additivity表示是否向上传递,即是否打印更高级别的日志-->
<logger name="com.example.demo03.service" level="DEBUG" additivity="false" />
<!--根日志,level:日志输出级别-->
<root level="INFO">
<!--引用日志输出策略-->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
将配置文件拷贝到springboot项目的resource目录下,在springboot配置文件中指定位置:
logging:
config: classpath:logback-spring.xml
使用方法如下:
//定义Logger对象,声明来自哪一个类
private static final Logger log = LoggerFactory.getLogger(BookController.class);
@GetMapping("/getbook")
public Book get(Integer id){
log.info("查找id="+id+"的book");
return bookService.getBookById(id);
}
**注意:**叫Logger的类有很多,要用SLF4j包的
也可以用lombok提供的@SLF4j注解生成Logger对象,@SLF4j注解作用在类上,会自动创建一个当前类的Logger对象
@Slf4j
@RestController
public class BookController {
@Autowired
private BookService bookService;
@GetMapping("/getbook")
public Book get(Integer id){
log.info("查找id="+id+"的book");
return bookService.getBookById(id);
}
}