SpringBoot学习---第二篇:日志配置

本文详细介绍SpringBoot中Logback和Log4j2的日志配置方法,包括日志格式、输出方式、文件保存及自定义配置等内容。

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

目录

1 配置 logback

1.1 日志格式

1.2 日志输出

1.3 文件保存

1.4 配置日志文件

2 配置 log4j2

2.1 添加依赖

2.2 配置文件


Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util LoggingLog4JLog4J2Logback。每种Logger都可以通过配置使用控制台或者文件输出日志内容。

1 配置 logback

默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。

1.1 日志格式

SpringBoot 的默认输出的日志格式如下:

输出如下元素:

  • 时间日期:精确到毫秒,可以用于排序
  • 日志级别:ERROR、WARN、INFO、DEBUG、TRACE
  • 进程ID
  • 分隔符:采用---来标识日志开始部分
  • 线程名:方括号括起来(可能会截断控制台输出)
  • Logger名:通常使用源代码的类名
  • 日志内容:我们输出的消息

Logback 是没有FATAL级别的日志,它将被映射到ERROR。

日志级别从低到高分为:TRACE< DEBUG< INFO< WARN< ERROR< FATAL。

1.2 日志输出

SpringBoot 默认为我们输出的日志级别为INFO、WARN、ERROR,如需要使用 “debug”,可以通过以下方式开启

  • 命令模式配置: java -jar myapp.jar --debug
  • 资源文件配置:在 application.properties 配置 “debug=true”

1.3 文件保存

默认情况下,SpringBoot 仅将日志输出到控制台,不会写入到日志文件中去。如果除了控制台输出之外还想写日志文件,则需要在 application.properties 设置 logging.file 或 logging.path 属性。

日志文件在达到10 MB 时进行切割,默认情况下会记录 ERROR、WARN、INFO 级别消息。

  • logging.file.max-size:限制日志文件大小
  • logging.file.max-history:限制日志保留天数

1.4 配置日志文件

默认情况下,Logback 用 INFO 级别输出到控制台,不会保存到文件。

spring boot 默认会加载 classpath:logback-spring.xml 或者 classpath:logback-spring.groovy。如需要自定义文件名称,在 application.properties 中配置 logging.config 选项即可。

1.4.1 默认情况

测试代码:

package com.example.demo.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/log")
public class LogController {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @RequestMapping("writelog")
    public String writeLog() {
        logger.debug("This is a debug message");
        logger.info("This is an info message");
        logger.warn("This is a warn message");
        logger.error("This is an error message");
        return "OK";
    }
}

在浏览器中输入http://localhost:8080/log/writelog 将会看到以下结果:

没有配置任何其它配置,就可以看到来自logback root logger的输出信息。我们注意到debug级别的日志没有记录下来,那是因为Spring Boot为Logback提供了默认的配置文件 base.xml。

base.xml内容:

<?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>

base.xml 中 root logger的日志级别被重写为Info级别,这就是上面例子中debug级别的日志没有打印的原因。

1.4.2 通过application.properties文件对Logback进行配置

配置日志文件:log.log 

配置 com.example.demo.controller 日志级别为:debug

logging.file=log.log
logging.level.com.example.demo.controller = debug

结果:

1.4.3 通过额外的文件配置Logback

在 src/main/resources 下创建 logback-spring.xml 文件,实例如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

   <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />

    <!--文件路径 -->
    <property name="LOG_HOME" value="/indexdata/log/"/>

    <!-- 开发环境 -->
    <springProfile name="dev">
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>${PATTERN}</pattern>
            </encoder>
        </appender>
        <logger name="com.example.demo" level="debug"/>
    </springProfile>

    <!-- 测试 正式 环境 -->
    <springProfile name="test,prod">
        <!-- 每天产生一个文件 -->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 文件名称 -->
                <fileNamePattern>${LOG_HOME}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
                <!-- 日志最大的历史 30天 -->
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${PATTERN}</pattern>
            </encoder>
            <!--日志文件最大的大小-->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>100MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
        <!-- 出错日志 appender -->  
        <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                <fileNamePattern>${LOG_HOME}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>  
                <maxHistory>30</maxHistory>  
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${PATTERN}</pattern>
            </encoder>
            <!--日志文件最大的大小-->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>100MB</MaxFileSize>
            </triggeringPolicy>
            <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>  
        </appender> 
        <logger name="com.example.demo" level="INFO">
            <appender-ref ref="FILE"/>
            <appender-ref ref="ERROR"/>
        </logger>

    </springProfile>

</configuration>

1.4.1 <springProfile>

<springProfile> 标签使我们让配置文件更加灵活,它可以选择性的包含或排除部分配置

<springProfile name="dev">
    <!-- 开发环境时激活 -->
</springProfile>

<springProfile name="dev,test">
    <!-- 开发,测试的时候激活-->
</springProfile>

<springProfile name="!prod">
    <!-- 当 "生产" 环境时,该配置不激活-->
</springProfile>

1.4.2  <appender>

格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。

控制台输出ConsoleAppender:ch.qos.logback.core.ConsoleAppender 

输出到文件 RollingFileAppender:ch.qos.logback.core.rolling.RollingFileAppender

1.4.3  <loger>

<loger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。有三个属性:

name: 用来指定受此loger约束的某一个包或者具体的某一个类。

level: 用来设置打印级别:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF

addtivity: 是否向上级loger传递打印信息。默认是true。

2 配置 log4j2

主要介绍spring boot集成log4j2日志框架。

2.1 添加依赖

打开pom.xml文件,去除logback的依赖包,添加log4j2的依赖包

2.2 配置文件

默认的properties配置对log4j2不够友好,我们应用外部配置文件,在资源文件夹src/main/resources下添加log4j2.xml或者log4j2-spring.xml,启动后spring boot自动加载,配置文件的示例如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<properties>
		<!-- 文件输出格式 -->
		<property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread] %c [%L] -| %msg%n</property>
	</properties>
 
	<appenders>
		<Console name="CONSOLE" target="system_out">
			<PatternLayout pattern="${PATTERN}" />
		</Console>
	</appenders>
	
	<loggers>
		<logger name="com.roncoo.education" level="debug" />
		<root level="info">
			<appenderref ref="CONSOLE" />
		</root>
	</loggers>
 
</configuration>

 

参考:

官方文档

Spring Boot 日志配置(超详细)

Spring Boot系列教程六:日志输出配置log4j2

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值