朱皮特的博客 自由的飞翔

springboot极简教程009-使用日志

2018-10-28
朱皮特
阅读量:

SpringBoot默认用Logback来记录日志,并用INFO级别输出到控制台,Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。

开启日志

依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

由于spring-boot-starter包含了spring-boot-starter-logging,Thymeleaf依赖包含了spring-boot-starter,所以一般不用特别开启就可以使用logback。

日志级别

TRACE < DEBUG < INFO < WARN <ERROR < FATAL

在application.yml中开启,例如:debug: true

级别控制

logging.level.?=LEVEL
  • ?为包名或Logger名
  • LEVEL:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF

例如:

  • logging.level.com.example=DEBUG :com.example包下所有class以DEBUG级别输出
  • logging.level.root=WARN :root日志以WARN级别输出

输出日志到文件

默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件。如果要编写除控制台输出之外的日志文件,则需在application.properties中设置logging.file或logging.path属性。

  • logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log
  • logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log

默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件,默认级别为:ERROR、WARN、INFO

切分文件日志RollingFileAppender

  • maxHistory:保存最大多少天的日志
  • totalSizeCap:日志文件上限自动删除旧日志

多环境日志输出

在logback-spring.xml中配置多环境,logback-spring.xml:

<!-- 测试环境+开发环境. 多个使用逗号隔开. -->
<springProfile name="test,dev">
    <logger name="com.dudu.controller" level="info" />
</springProfile>
<!-- 生产环境. -->
<springProfile name="prod">
    <logger name="com.dudu.controller" level="ERROR" />
</springProfile>

也可以在多环境的yml文件中分别配置,例如在application.yml中:

spring:
  profiles:
    active: prod

在application-dev.yml中:

logging:
  config: classpath:logback-dev.xml

在application-prod.yml中:

logging:
  config: classpath:logback-prod.xml

然后就可以分别配置日志文件了。

示例代码

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/*
运行后在浏览器中访问:
http://localhost:8080
http://localhost:8080/index
*/
@RestController
public class HelloController {
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @RequestMapping({"/", "/index"})
    private String index() {
        //日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。
        logger.trace("日志输出 trace");
        logger.debug("日志输出 debug");
        logger.info("日志输出 info");
        logger.warn("日志输出 warn");
        logger.error("日志输出 error");
        return "hello world";
    }
}

Comments

Content