Spring Boot日志的打印与持久化详细解析
在Spring Boot应用中,日志是开发和调试的重要工具。通过合理的配置,我们可以实现日志的打印和持久化,方便问题的排查和解决。本文将详细介绍Spring Boot日志的打印与持久化,并包含两条示例。
Spring Boot日志的分类
Spring Boot日志分为如下五个级别:
- TRACE:跟踪级别,最低级别,用于记录最详细的日志信息。
- DEBUG:调试级别,用于记录程序运行细节,适合于在开发环境中使用。
- INFO:普通日志级别,用于记录程序正常的运行状态,不影响程序的运行。
- WARN:警告级别,用于记录一些较小的异常,不影响程序的稳定性,但需要注意。
- ERROR:错误级别,用于记录较严重的异常,需要针对性的解决。
在应用的开发和调试过程中,我们可以根据具体需求选择日志级别。
Spring Boot日志的配置
Spring Boot采用了通用的日志接口——SLF4J(Simple Logging Facade for Java)作为业务代码和特定日志实现之间的中间层。因此,在引入Spring Boot日志功能时,我们需要引入如下两个依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
其中,spring-boot-starter为Spring Boot核心依赖,spring-boot-starter-log4j2为Log4j2的具体实现。
在引入依赖之后,我们需要在application.properties文件中,进行日志配置。例如,我们可以设置日志级别为DEBUG,将日志输出到控制台:
logging.level.root=DEBUG
logging.pattern.console=%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg%n
其中,logging.level.root设置根日志的日志级别,logging.pattern.console设置日志输出到控制台时的格式。
Spring Boot日志的持久化配置
除了控制台输出,我们还可以将日志持久化到文件中。例如,我们可以将日志存储到logs目录下的spring-boot-log.log文件中:
logging.file=logs/spring-boot-log.log
logging.level.root=DEBUG
logging.pattern.console=%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg%n
示例一
下面是一个示例,用于记录用户的登录日志。我们可以使用Log4j2记录用户的登录事件,将其存储到日志文件中。
@RestController
public class UserController {
private final Logger logger = LogManager.getLogger(UserController.class);
//省略其他代码
@PostMapping("/login")
public CommonResponse<User> login(@RequestBody UserLoginRequest request) {
User user = //从数据库中查询用户信息
if(user != null && user.getPassword().equals(request.getPassword()) {
logger.info("用户登录成功,用户名为{}", user.getUserName());
return new CommonResponse<>(user);
}else {
logger.error("用户登录失败,用户名为{}", request.getUserName());
throw new BusinessException("用户名或密码错误");
}
}
}
上述代码中,我们使用LogManager获取到UserController的Logger实例,并在用户登录时,使用logger记录用户登录成功和失败的事件。使用如下配置文件,将日志记录到logs/user.log文件中:
logging.level.root=INFO
logging.file=logs/user.log
logging.pattern.console=%d{HH:mm:ss.SSS}[%thread]%highlight(%-5level)%logger{36} - %msg%n
示例二
下面是一个示例,用于记录系统的异常日志。我们可以使用Logback记录Java异常,并将其存储到日志文件中。需要注意的是:在开发和测试环境中,我们可以把异常详细信息输出到控制台,方便问题的排查和解决;而在生产环境中,我们应该避免在控制台输出详细的异常信息,以保证系统的安全性。
@ControllerAdvice
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
//省略其他代码
@ExceptionHandler(Exception.class)
@ResponseBody
public CommonResponse<?> handleException(Exception e){
String errorMessage = "未知异常,请联系管理员";
if(e instanceof BusinessException){
BusinessException be = (BusinessException) e;
errorMessage = be.getMessage();
}
logger.error(errorMessage, e); //记录异常日志,注意参数顺序,errorMessage在前,异常对象在后
return new CommonResponse<>(ResultCode.SYSTEM_ERROR.getCode(), errorMessage);
}
}
上述代码中,我们使用LoggerFactory获取到GlobalExceptionHandler的Logger实例,并在捕获到异常时,使用logger记录异常日志。使用如下配置文件,将异常信息记录到logs/exception.log文件中:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg%n</pattern>
</encoder>
</appender>
<appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/exception.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/exception-%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appenderRef ref="console"/>
<appenderRef ref="dailyRollingFileAppender"/>
</root>
</configuration>
总结
本文介绍了Spring Boot日志的打印和持久化,分别针对不同的应用场景进行了示例说明。在实际应用中,我们应该根据具体需求,选择合适的日志级别,并将日志合理配置,以便于开发和调试。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot日志的打印与持久化详细解析 - Python技术站