天天看点

Spring Boot 入门-日志管理

作者:码农角落

在软件开发过程中,日志记录是非常重要的,主要有以下几个原因:

排错:当程序出现问题时,日志可以记录下错误信息、异常堆栈等重要信息,方便程序员进行排错,提高程序的可靠性。

统计分析:通过分析程序日志,可以了解程序的使用情况,统计访问量、异常数量等重要指标,为业务决策提供依据。

运维监控:通过实时监控程序日志,可以及时发现系统故障,快速解决问题,保证系统稳定性。

安全审计:日志记录可以记录用户访问行为、操作记录等,有助于对系统安全进行审计,发现异常行为,及时采取措施。

因此,记录日志是非常重要的,对于任何一个应用程序来说都是必不可少的。在Spring Boot中,通过集成各种日志框架,可以方便地进行日志记录,提高程序的可靠性、稳定性和安全性。

Spring Boot的日志框架支持多种不同的输出方式,例如控制台输出、文件输出、网络输出等。可以通过在application.properties或application.yml文件中配置日志输出方式和级别。以下是一些常用的配置属性:

logging.config: 用于指定配置文件名称(当日志的配置项太多时,可以使用配置文件来配置日志)

logging.file.name: 日志文件名

logging.level.:用于设置不同包下的日志级别。例如,logging.level.root=INFO表示设置根包下的日志级别为INFO。

logging.level.[logger name]: 指定某个日志记录器的输出级别,例如“logging.level.org.springframework.web: DEBUG”

logging.file.path:用于设置日志文件输出的目录。例如,logging.file.path=/var/log/app表示将日志文件输出到/var/log/app目录下。

logging.pattern.console:用于设置控制台日志输出格式。例如,logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n表示输出的日志格式包括时间戳、线程信息、日志级别、Logger名称和日志内容等。

logging.pattern.file:用于设置日志文件输出格式。例如,logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n表示输出的日志格式与控制台输出格式相同。

logging.file.max-size:用于设置日志文件的最大大小。例如,logging.file.max-size=10MB表示日志文件最大为10MB,超过该大小将自动进行备份。

logging.file.max-history:用于设置日志文件备份的最大天数。例如,logging.file.max-history=7表示最多备份7天的日志文件。

注意:如果没有配置日志文件的名称日志只在控制台上输出

日志使用

配置文件

spring:
  application:
    name: spring-boot
logging:
  #  方便Spring Boot Admin页面上实时查看日志
  file:
    name: ${spring.application.name}.log
  level:
    com.example: ERROR
    root: ERROR
    org.springframework: ERROR           

以上配置了日志文件名称为:"spring-boot.log",com.example和org.springframework及根包的日志级别都为ERROR

程序中使用日志

private static final Logger log = LoggerFactory.getLogger(TestController.class);

    @GetMapping("/hello")
    public String hello() {
        log.error("测试日志,{}","spring boot");
        log.info("测试日志,{}","spring boot");
        return String.format("第一个spring boot 应用");
    }
           

@Slf4j日志注解

@Slf4j是Lombok提供的一种简化日志使用的注解,在使用@Slf4j注解的类中可以直接使用log对象进行日志输出,不需要使用LoggerFactory.getLogger获取Logger对象。例如

@Slf4j
@Controller
@RequestMapping("Test")
public class TestController {

//    private static final Logger log = LoggerFactory.getLogger(TestController.class);

    @GetMapping("/hello")
    public String hello() {
        log.error("测试日志,{}","spring boot");
        log.info("测试日志,{}","spring boot");
        return String.format("第一个spring boot 应用");
    }
           

继续阅读