SpringBoot项目中日志控制,配置logback(logback.xml的配置及介绍)


前言

SpringBoot项目中对日志的处理手动控制,这是我整理的logback.xml文件内容,直接复制copy使用即可,里面有详细的注释使用,如果是单模块,就在java同层级的resoures目录下(存放application.yml那个目录下)新建一个logback.xml,重启服务即可生效。


一、大致介绍

可直接跳过,看后面的logback.xml内容,懂的直接复制使用,一是一些理论知识,供了解的

logback依赖jar包

SpringBoot项目配置logback理论上需要添加logback-classic依赖jar包:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

但是因为SpringBoot项目默认就是使用的就是logback日志系统,创建SpringBoot项目时引入的spring-boot-starter或者spring-boot-starter-web依赖jar包中已经包含了spring-boot-starter-logging的依赖,里面同时包含多种日志系统依赖,如下图所示:
在这里插入图片描述
包括logback和log4j,所以,无需额外添加依赖,直接配置logback.xml就可以了

此外,如果需要切换为log4j2,那么需要在spring-boot-starter-web依赖中排除springboot自带的commons‐logging,然后在引入log4j2的依赖jar包,如下所示:

<!--排除 commons‐logging-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <exclusions>
      <exclusion>
      <groupId>commons‐logging</groupId>
      <artifactId>commons‐logging</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<!--引入log4j2 -->
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

logback的默认配置

前面说到SpringBoot项目默认使用logback,那么对于logback的配置情况,SpringBoot又是如何定义的呢?

首先,SpringBoot会从resource包下查找logback-test.xml或logback.xml ,如果这两个都不存在,则会调用BasicConfigurator,创建一个最小化的基本配置。

最小化配置由一个关联到根logger的ConsoleAppender组成,默认输出模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n;
root logger级别为DEBUG,所以并不会生成日志文件,只会输出到控制台。

创建logback.xml配置文件

通过自定义logback.xml配置文件来控制日志输出情况,通常我们会配置三个日志组件:

  • 控制台输出
  • 输出info级别日志文件
  • 输出error级别日志文件

以下为logback.xml完整配置,里面有具体的注释,直接copy使用

<?xml version="1.0" encoding="UTF-8"?>
<!-- scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
<!-- scanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!-- 读取application.properties配置 -->
<!--    <property resource="application.properties" />-->
    
    <!-- 生成文件名前缀 -->
    <property name="FILE_PREFIX" value="yyzRead" />
    <!-- 输出文件路径 -->
    <property name="OPEN_FILE_PATH" value="D:\log_yyzDevelopRead"/>
    <!-- 文件保存时间 这里是7天 -->
    <property name="EXIST_TIME" value="7"/>
    <!-- 文件输出格式 -->
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    <!-- 日志文件最大的大小 -->
    <property name="MAX_FILE_SIZE" value="10MB"/>


    <!--  控制台输出  -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 输出到all文件 这里是全部的日志内容 -->
    <appender name="OPEN-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--不能有这项配置!!!!!-->
        <!--<Encoding>UTF-8</Encoding>-->
        <!--<File>${OPEN_FILE_PATH}/${FILE_PREFIX}.log</File>-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${OPEN_FILE_PATH}/all/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>${EXIST_TIME}</MaxHistory>
            <TimeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--日志文件最大的大小-->
                <MaxFileSize>${MAX_FILE_SIZE}</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${PATTERN}</pattern>
        </layout>
    </appender>

    <!--输出到debug文件-->
    <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${OPEN_FILE_PATH}/debug/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
            <TimeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>${MAX_FILE_SIZE}</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 只打印DEBUG日志, -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>DEBUG</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--输出到info文件-->
    <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${OPEN_FILE_PATH}/info/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
            <TimeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>${MAX_FILE_SIZE}</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 只打印INFO日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--输出到error文件-->
    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${OPEN_FILE_PATH}/error/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
            <TimeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>${MAX_FILE_SIZE}</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 只打印ERROR日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--输出到warn文件-->
    <appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${OPEN_FILE_PATH}/warn/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
            <TimeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>${MAX_FILE_SIZE}</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 只打印WARN日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    
    <!--  默认输出info等级,然后再根据各自的拦截过滤规则去处理  -->
    <root level="info">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="OPEN-FILE"/>
        <appender-ref ref="debug" />
        <appender-ref ref="info" />
        <appender-ref ref="error" />
        <appender-ref ref="warn" />
    </root>
</configuration>

仰天大笑出门去,我辈岂是蓬蒿人

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Spring Boot项目,可以使用logback-spring.xml配置文件来配置日志记录。下面是一个简单的logback-spring.xml配置文件示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/myapp.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>logs/myapp.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>30</maxHistory> <totalSizeCap>1GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> </configuration> ``` 上面的配置文件定义了两个appender:CONSOLE和FILE。CONSOLE appender将日志输出到控制台,FILE appender将日志输出到文件。它们都使用相同的Encoder定义日志格式。 rollingPolicy定义了日志文件的滚动策略。上面的配置文件使用SizeAndTimeBasedRollingPolicy,它将根据文件大小和日期来滚动日志文件。它还定义了日志文件的最大数量和最大大小。 root定义了日志记录的最低级别。在上面的配置文件,它被设置为info,这意味着只有info、warn和error级别的日志消息才会被记录。root还将两个appender(CONSOLE和FILE)附加到它上面,这意味着所有的日志消息都将被发送到这两个appender

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT行业小趴菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值