1. 首页
  2. >
  3. 编程技术
  4. >
  5. Java

(三)SpringBoot项目的日志配置

(三)SpringBoot项目的日志配置

SLF4j+Logback的组合

一、SpringBoot的日志框架选用的什么技术?

SpringBoot的日志框架选用的是目前市面上最流行的SLF4j+Logback的组合,SLF4j负责日志门面,Logback负责日志实现。

(三)SpringBoot项目的日志配置

日志门面SLF4j框架图谱

视频解释上面的图谱:

二、如何统一项目中所有的日志到SLF4j?

项目中别的框架使用了各种日志,并非SLF4j,那么就需要统一日志,最后共同使用SLF4j进行日志输出。

统一SLF4j日志的方法为:

  • 将项目中其他日志框架先排除出去。
  • 用中间包来替换原有的日志框架。
  • 导入SLF4j其他的实现。

(三)SpringBoot项目的日志配置

三、SpringBoot的日志包依赖关系

1、在IEDA开发工具下查看依赖包关系的方法:

  • 打开pom.xml文件
  • 空白处鼠标右键,选择Diagrams--->Show Dependencies

(三)SpringBoot项目的日志配置

2、找到日志包的依赖网

spring-boot-starter-logging

(三)SpringBoot项目的日志配置

底层日志包依赖关系

SpringBoot底层使用的是SLF4j+Logback组合的进行日志记录。

3、pom.xml中引入其他框架的依赖,一定要移除掉这个框架自带默认的日志依赖,否则会引起jar包冲突。

比如Spring 框架自带的日志框架commons-logging,那么如果在SpringBoot项目中依赖Spring,就需要移除掉这个默认的日志。移除标签<exclusions>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.3.RELEASE</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

四、SpringBoot默认日志级别

1、日志级别由低到高分别是trace<debug<info<warn<error。

写一个输出日志级别的代码如下:

package com.test.demo.springbootdemo01;

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootDemo01ApplicationTests {

//日志记录器
Logger logger = LoggerFactory.getLogger(getClass());

@Test
void contextLoads() {
logger.trace("trace日志");
logger.debug("trace日志");
logger.info("info日志");
logger.warn("warn日志");
logger.error("error日志");
}
}

结果,SpringBoot默认的日志级别是info,比info级别高的都会生效,级别低的就被过滤掉了。

输出级别为:

2020-04-19 17:40:45.968  INFO 11604 --- [           main] c.t.d.s.SpringbootDemo01ApplicationTests : info日志
2020-04-19 17:40:45.968 WARN 11604 --- [ main] c.t.d.s.SpringbootDemo01ApplicationTests : warn日志
2020-04-19 17:40:45.968 ERROR 11604 --- [ main] c.t.d.s.SpringbootDemo01ApplicationTests : error日志

2、SpringBoot如何修改默认的日志级别呢?

application.yml配置文件这么写:

logging:
level:
com.test.demo: warn

或者使用application.properties配置文件这么写:

logging.level.com.test.demo=warn

这样就可以将项目的日志级别写改为warn。

3、日志的其他设置

%d表示日期
%thread表示线程名
%-5level表示级别从左显示5个字符宽度
%logger{50}表示logger名字最长50个字符,否则按句点分隔
%msg表示日志消息
%n表示换行符

application.yml配置文件代码如下:

logging:
path: /spring/logs #指定日志存放的文件夹,文件名默认是spring.log
pattern:
console: '%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n' #控制台日志输出格式
file: '%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n' #日志文件输出内容格式

或者使用application.properties配置文件这么写:

logging.path=/spring/logs
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n

需要注意的是,设置输出日志时,因为yml配置文件,开头不能使用%符号,所以必须在首尾加上单引号。

五、自己实现项目日志的配置文件,不使用SpringBoot默认的配置文件

需要在项目下添加logback的配置文件logback-spring.xml或者logback.xml。

推荐使用logback-spring.xml,因为加上spring的后缀后,可以使用SpringBoot的高级功能,在配置文件中添加指定环境的配置

#指定的是开发环境
<springProfile name="dev">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
</springProfile>
#指定的是非开发环境
<springProfile name="!dev">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
</springProfile>

在application.yml中添加激活dev的配置

spring:
profiles:
active: dev

在application-dev.yml中添加日志级别和日志存放的文件夹

#启动端口
server:
port: 8080
logging:
path: /spring/logs
level:
com.test.demo: debug
config: classpath:logback-spring.xml

最后编写logback-spring.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 读取yml文件中的值 -->
<springProperty scope="context" name="logPath" source="logging.path"/>

<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="com.test.demo.TestLayout">
<appName>test</appName>
</layout>
</encoder>
</appender>

<!--每天生成日志文件-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${logPath}.log</File>
<filter class="com.test.demo.filter.LogEventFilter"/>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="com.test.demo.TestLayout">
<appName>test</appName>
</layout>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<fileNamePattern>${logPath}_%d{yyyy-MM-dd}.log</fileNamePattern>
<!--最多保留5天的日志-->
<MaxHistory>5</MaxHistory>
</rollingPolicy>
</appender>

<appender name="fileLevel" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE" />
</appender>
<root>
<level value="DEBUG" />
<!-- <appender-ref ref="STDOUT" /> -->
<appender-ref ref="fileLevel" />
</root>
</configuration>
nginx反向代理配置去除前缀
« 上一篇 2020年04月19日 pm16:04
mysql读写分离原理及配置
下一篇 » 2020年04月20日 am07:00

相关推荐