前言
Logback是SpringBoot内置的日志处理框架,你会发现spring-boot-starter其中包含了spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。而spring-boot-starter-web包含了spring-boot-starter;需要的可以自己去看下引入spring-boot-starter-web后的项目JAR依赖关系;
一、SpringBoot默认Logback配置
在前面的SpringBoot系列中,我并没有主动去配置过任何和日志打印的相关配置,但是控制台却打印了相关的启动日志;
- 时间日期:精确到毫秒
- 日志级别:ERROR, WARN, INFO, DEBUG or TRACE
- 进程ID
- 分隔符:— 标识实际日志的开始
- 线程名:方括号括起来(可能会截断控制台输出)
- Logger名:通常使用源代码的类名
- 日志内容
我们没有配置任何其它配置,就可以看到来自logback root logger的输出信息。因为SpringBoot为Logback提供了默认的配置文件base.xml,base.xml文件里定义了默认的root输出级别为INFO
<?xml version="1.0" encoding="UTF-8"?>
<!--
Base logback configuration provided for compatibility with Spring Boot 1.1
-->
<included>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>
Spring Boot中默认配置ERROR、WARN和INFO级别的日志输出到控制台。
您还可以通过启动您的应用程序 --debug 标志来启用“调试”模式(开发的时候推荐开启),以下两种方式皆可:
在运行命令后加入–debug标志,如:$ java -jar springTest.jar --debug
在application.properties中配置debug=true,该属性置为true的时候,核心Logger(包含嵌入式容器、hibernate、spring)会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别。
二、使用SpringBoot的配置文件application.properties或application.yml实现简单的日志配置
默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件。
使用Spring Boot喜欢在application.properties或application.yml配置,这样只能配置简单的场景,保存路径、日志格式等,复杂的场景(区分 info 和 error 的日志、每天产生一个日志文件等)满足不了,只能自定义配置,下面会演示。
为了方便测试,新建以下类测试日志打印:
测试Component
package com.jd.m.tg.log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class LogHelper {
private static final Logger LOG= LoggerFactory.getLogger(LogHelper.class);
public void helpLog(){
LOG.debug("打印DEBUG级别");
LOG.info("打印INFO级别");
LOG.warn("打印WARN级别");
LOG.error("打印ERROR级别");
}
}
测试Controller:
package com.jd.m.tg.controller;
import com.jd.m.tg.log.LogHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("log")
public class TestLogController {
private static final Logger LOG= LoggerFactory.getLogger(TestLogController.class);
@Autowired
private LogHelper logHelper;
@ResponseBody
@RequestMapping(value = "helpLog")
public void testLog(){
LOG.info("开始打印日志:INFO");
logHelper.helpLog();
LOG.info("结束打印日志INFO");
}
}
级别控制
所有支持的日志记录系统都可以在Spring环境中设置记录级别(例如在application.properties中)
格式为:‘logging.level.* = LEVEL’
logging.level:日志级别控制前缀,*为包名或Logger名
LEVEL:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
举例:
logging.level.com.jd.m.tg.controller.TestLogController=INFO:com.jd.m.tg.controller.TestLogController.class以ERROR级别输出
logging.level.root=INFO:root日志以INFO级别输出
附SpringBoot内置详细日志配置参数说明:
# LOGGING
//定义logback配置文件位置
logging.config= # Location of the logging configuration file. For instance `classpath:logback.xml` for Logback
//日志异常时的转换语
loggin