SpringBoot中的日志使用

文章介绍了SpringBoot默认使用Slf4j和logback的日志系统,演示了如何在SpringBootTest中使用这两种日志框架,以及如何在application.properties和logback.xml中配置日志,以及如何通过SpringProfile动态切换日志实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

SpringBoot的默认使用

SpringBoot的日志配置

使用SpringBoot解析日志配置

SpringBoot切换日志实现


SpringBoot的默认使用

观察SpringBoot的Maven依赖图

可以看出来,SpringBoot默认使用的日志系统是使用Slf4j作为门户,logback作为日志实现

编写一个测试代码看是否是这样

@SpringBootTest
class SpringbootLogDemoApplicationTests {
	//使用Slf4j来创建LOGGER对象
	public static final Logger LOGGER = LoggerFactory.getLogger(SpringbootLogDemoApplicationTests.class);

	@Test
	public void test01() throws Exception {
		LOGGER.error("error");
		LOGGER.warn("wring");
		LOGGER.info("info");
		LOGGER.debug("debug");
		LOGGER.trace("trace");

        //使用Log4j来获取Logger对象
		org.apache.logging.log4j.Logger logger = LogManager.getLogger(SpringbootLogDemoApplicationTests.class);
		logger.info("log4j info");
	}
}

运行结果如下 

2023-10-22 17:21:16.307 ERROR 8912 --- [ main] com.zmt.SpringbootLogDemoApplicationTests : error

2023-10-22 17:21:16.308 WARN 8912 --- [ main] com.zmt.SpringbootLogDemoApplicationTests : wring

2023-10-22 17:21:16.313 INFO 8912 --- [ main] com.zmt.SpringbootLogDemoApplicationTests : info

2023-10-22 17:21:16.337 INFO 8912 --- [ main] com.zmt.SpringbootLogDemoApplicationTests : log4j info

可以看到输出格式是一样的,说明即使使用Log4j获取的Logger对象打印日志实际上还是logback来实现日志输出。

SpringBoot的日志配置

我们可以在aplication.properties文件中进行简单的配置

#指定自定义Logger对象的输出日志级别
logging.level.com.zmt = debug

#指定控制台输出消息格式
logging.pattern.console=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] ===== %msg%n
#指定日志文件存放的目录,默认文件名为spring.log
logging.file.path=/logs/springboot/
#指定日志文件消息格式
logging.pattern.file=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] ===== %msg%n

运行观察控制台和文件

但是application.properties的配置并不能满足实际需求,比如文件拆分规则等,我们可以自己添加对应日志框架的配置文件来代替application.properties的日志配置

接下来添加一个logback.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %M %L [%thread] %m%n"></property>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--控制输出流对象,默认为System.out黑色字体-->
        <target>System.err</target>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--只输出error级别的信息-->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <!--自定义Logger-->
    <logger name="com.zmt" level="info" additivity="dalse">
        <appender-ref ref="console"/>
    </logger>
</configuration>

运行测试代码观察控制台输出

只输出了红色字体的error级别日志。配置文件生效

使用SpringBoot解析日志配置

如果使用SpringBoot解析日志配置我们需要将logback.xml文件修改为logback-spring.xml。因为logback.xml加载过早,无法解析扩展标签。而修改为logback-spring.xml后,可以解析SpringBoot的扩展标签。

在xml文件中添加springProfile标签

  	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--控制输出流对象,默认为System.out黑色字体-->
        <target>System.err</target>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--开发环境下解析成一种消息格式-->
            <springProfile name="dev">
                <pattern>${pattern}</pattern>
            </springProfile>
            <!--生产环境下解析成另一种消息格式-->
            <springProfile name="pro">
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %M %L [%thread]========= %m%n</pattern>
            </springProfile>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--只输出error级别的信息-->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

在application.properties添加配置指定环境

#设置为开发环境
spring.profiles.active=dev

运行观察控制台是否是输出“---”

修改为pro环境后再次运行观察

可以看到输出格式不同。配置生效

SpringBoot切换日志实现

在pom文件中进行修改

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
        <!-- 排除jar包 -->
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

  	<!-- 引入jar包 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j2</artifactId>
		</dependency>

运行发现又使用了log4j2的默认配置打印日志输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zmbwcx2003

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值