这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战
1、基本介绍
默认情况下,Spring Boot项目就会用Logback来记录日志,并用INFO级别输出到控制台。如下图: 实际开发中我们不需要直接添加logback日志依赖。 你会发现 spring-boot-starter 其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。
日志级别从低到高分为:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
只能展示 大于或等于 设置的日志级别的日志;也就是说springboot默认级别为INFO,那么在控制台展示的日志级别只有INFO 、WARN、ERROR、FATAL
2、logback.xml日志文件配置
根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml Log4j2:log4j2-spring.xml, log4j2.xml JDK (Java Util Logging):logging.properties
Spring Boot官方推荐优先使用带有 -spring 的文件名作为你的日志配置(如使用 logback-spring.xml ,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项(下面会提到)。 默认的命名规则,并且放在 src/main/resources 下如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,application.yml可以通过logging.config属性指定自定义的名字:
logging:
config: classpath:logback-spring.xml
这里写代码片虽然一般并不需要改变配置文件的名字,但是如果你想针对不同运行时Profile使用不同的日志配置,这个功能会很有用。 项目日志内容;
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 此xml在spring-boot-1.5.3.RELEASE.jar里 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<!-- 开启后可以通过jmx动态控制日志级别(springboot Admin的功能) -->
<!--<jmxConfigurator/>-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<File>/home/hfw-client/hfw_log/stdout.log</File>-->
<!--日志的存放位置-->
<File>D:/log/hfw-client/hfw_log/stdout.log</File>
<encoder>
<pattern>%date [%level] [%thread] %logger{60} [%file : %line] %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 添加.gz 历史日志会启用压缩 大大缩小日志文件所占空间 -->
<!--<fileNamePattern>/home/hfw-client/hfw_log/stdout.log.%d{yyyy-MM-dd}.log</fileNamePattern>-->
<fileNamePattern>D:/log/hfw-client/hfw_log/stdout.log.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory><!-- 保留30天日志 -->
</rollingPolicy>
</appender>
<!--指定只打印这个路径下的为debug级别,否则日志打印太多不好看-->
<logger name="com.ratel.link.dao" level="DEBUG" />
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
3,打印sql日志
比较蠢的方法是直接把logback-spring.xml文件中的root标签的level属性改为DEBUG:
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
这个改为DEBUG则会打印最详细的日志,包括mybatis的sql语句(量太大建议开发测试时才用) 我们一般针对DAO的包进行DEBUG日志设置: logback-spring.xml
<!--指定只打印这个路径下的为debug级别,否则日志打印太多不好看-->
<logger name="com.ratel.link.dao" level="DEBUG" />
这样的话,只打印SQL语句:
4、代码里打印日志
之前我们大多数时候自己在每个类创建日志对象去打印信息,比较麻烦:
private static final Logger logger = LoggerFactory.getLogger(YjServiceImpl.class);
logger.error("xxx");
现在可以直接在类上通过 @Slf4j 注解去声明式注解日志对象 先在pom.xml中添加依赖:
<!--@Slf4j自动化日志对象-log-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
</dependency>
然后就直接可以使用了:
@RestController
@Slf4j
@RequestMapping("slf4j")
public class Slf4jController {
@GetMapping("test/{name}")
public String testslf4j(@PathVariable("name") String name){
log.info(name+",你好,这里是测试@Slf4j");
return name+",你好,这里是测试@Slf4j";
}
}
使用浏览器访问:(注:使用postman测试的话,可能会乱码,大致原因已经定位到 @PathVariable注解的问题目前没找到借据方案)