6、springboot:日志的介绍、使用、切换
一、主流的日志框架介绍
二、springboot中SLF4J的使用
如何在系统中使用SLF4j https://www.slf4j.org
如下图:
每一个日志的实现框架都有自己的配置文件。
使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件
三、springboot如何使其它日志框架转为slf4j进行输出
springboot使用(slf4j+logback)、 Spring使用(commons-logging)、Hibernate使用(jboss-logging)、MyBatis、xxxx
springboot进行统一日志记录,即使是别的框架和我一起统一使用slf4j进行输出
四、springboot日志关系
依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
SpringBoot使用它来做日志功能:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>
SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,
引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可;
五、springboot中日志的相关配置
1、springboot中的默认日志相关配置
@RunWith(SpringRunner.class) @SpringBootTest public class SpringbootLogTest {
//记录器 Logger logger = LoggerFactory.getLogger(getClass()); @Test public void logTest() { logger.trace("这是trace日志"); logger.debug("这是debug日志"); logger.info("这是info日志"); //springboot 默认设置的 info级别 logger.warn("这是warn日志"); logger.error("这是error日志"); } }
日志的级别由低到高
trace<debug<info<warn<error
运行springboot应用的时候查看控制台可以发现;springboot日志输出级别默认是info级别(只输出>=info的级别的的日志信息)
可以调整输出的日志级别,只输出>=日志级别的日志信息
另外默认把日志信息是输出到控制台
2.application.xml中配置日志级别
logging.level.com.mr=debug //指定扫描的包(红色备注)以及日志级别
3.配置日志输出文件(不配置时默认只输出到控制台)
方式一:
#没有指定具体路径的时候日志文件就生成在当前项目下 logging.file.name=springboot.log #指定了具体路径的时候日志文件就生成在指定路径下 #logging.file.name=e:/springboot.log
方式二:
#在当前项目的磁盘(我的项目现在在D盘)的根路径创建spring文件和和里面的log文件,使用spring.Log作为默认文件
logging.file.path=/spring/log
当配置了logging.file.name时logging.file.path就会失效
4.自定义日志信息输出格式
#在控制台输出的日志格式 logging.pattern.console =
#指定在文件中日志输出的格式
logging.pattern.file =
日志输出格式:
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
-->
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
举例:
输出结果:
配置代码小结:
#设置日志级别 logging.level.com.atguigu=trace #配置日志文件: # 方式一: #没有指定具体路径的时候日志文件就生成在当前项目下 #logging.file.name=springboot.log #指定了具体路径的时候日志文件就生成在指定路径下 #logging.file.name=e:/springboot.log # 方式二: #在当前项目的磁盘的根目录下创建spring文件夹,再在里面创建log文件夹;最后使用spring.log作为默认日志文件名 logging.file.path=/spring/log #当配置了logging.file.name时logging.file.path就会失效 #配置控制台日志输出格式 logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n #配置文件中日志输出格式 logging.pattern.file=%d{yyyy-MM-dd} ==== [%thread] === %-5level %logger{50} - %msg%n
六、自定义日志配置文件(不使用springboot的默认日志配置)
以自定义logback日志的配置为例:(在类路径下放名为logback.xml的文件):
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="/app/log" /> <!-- 定义日志的文件名 --> <property name="appName" value="loog"/> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志输出级别 --> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>
<springProfile name="xxx"> <!--可以指定某段配置只在某个环境下生效-->
</springProfile>
此时修改logback.xml名为logback-spring.xml
<springProfile name="xxx">指定某段配置根据环境不同而配置的内容不同
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="/app/log" /> <!-- 定义日志的文件名 --> <property name="appName" value="loog"/> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <springProfile name="dev"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} +++ [%thread] %-5level %logger{50} - %msg%n</pattern> </springProfile> <springProfile name="!dev"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} --- [%thread] %-5level %logger{50} - %msg%n</pattern> </springProfile> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志输出级别 --> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>
指定环境:
如果使用名字为logback.xml作为日志配置文件,还要使用profile功能,会报错
推荐使用spring-logbac.xml 是由Spring Boot识别,可以使用新功能
七、切换日志框架
可以按照slf4j的日志适配图,进行相关的切换;
1、切换为log4j的配置(记得写相关配置文件)
①假如现在想用 log4j ,需要排除 springboot 默认依赖的 logback 依赖;
②log4j-over-slf4j.jar 是 log4j 转成 slf4j 要用的,而我们现在就是想用 log4j,不想转为slf4j,所以不需要这个转换包,即排除这个依赖,
③slf4j-log4j12.jar 是 log4j 要用的中间包,需导入。
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId>
<exclusions> <exclusion> <artifactId>logback-classic</artifactId> <groupId>ch.qos.logback</groupId> </exclusion> <exclusion> <artifactId>log4j-over-slf4j</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions>
</dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency>
2、切换为log4j2日志框架(记得写相关配置文件)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-logging</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions>
</dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)