logback配置文件详解及整合springboot项目

本文详细介绍了如何在SpringBoot项目中使用Logback作为日志框架,包括如何配置默认和自定义的logback.xml文件,以及如何设置不同级别的过滤器和输出目的地。同时涵盖了多环境配置,如指定不同环境的日志配置文件。
摘要由CSDN通过智能技术生成

使用介绍

logback依赖坐标

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>

由于springboot框架本身就使用了logback作为日志框架,所以,在springboot项目中我们无须在引入logback依赖。(依赖的传递性) 

感兴趣的可以点击一下坐标引用链向查看,最终会找到logback坐标

<artifactId>spring-boot-starter-web</artifactId>
<artifactId>spring-boot-starter</artifactId>
<artifactId>spring-boot-starter-logging</artifactId>

   多环境配置  

默认配置文件叫logback.xml

如果不想使用这个默认的文件名称(多环境配置多套),需要再application.yml文件中指定配置文件,如下:

server:
  port: 8081
#如果logback配置文件不使用配置文件默认的名称logback.xml 则需要在此处配置文件地址和名称
logging:
  config: classpath:logback-dev.xml

配置文件讲解

<?xml version="1.0" encoding="UTF-8"?>
<!--logback使用xml文件作为配置
根节点:configuration 属性有scan、scanPeriod、debug
scan:当配置文件被修改后,将会被重新加载,默认值为true
scanPeriod:设置检测配置文件是否有修改的 时间间隔,时间单位默认为毫秒(也可以自己指定单位) 当scan属性为true时,此属性生效,默认的时间间隔为1分钟(60000毫秒)
debug:是否打印logback内部日志信息,默认值为false
configuration标签的子节点有:  contextName,property,appender,logger,root
  contextName:应用上下文名称,一般不用配置
  property:用来自定义变量和变量值的标签 有两个属性name和value ,name变量名称,value是为变量定义的值,可以通过${变量名}来使用
  appender:用来格式化日志输出节点,两个属性name 和class ,class 用来指定那种输出策略
    输出策略有:
    ConsoleAppender:日志输出到控制台,类名:ch.qos.logback.core.ConsoleAppender
    FileAppender:日志输出到文件:类名:ch.qos.logback.core.FileAppender,目标文件可以指定,如果改文件已经存在,它将根据附加属性的值被追加或者截断
    RollingFileAppender:滚动记录文件,FileAppender的子类。 当符合条件(大小,时间)日志进行切分处理。类名:ch.qos.logback.core.rolling.RollingFileAppender
        RollingFileAppender 有子标签RollingPolicy(滚动策略) 和TriggeringPolicy(触发策略),如果RollingPolicy也实现了TriggeringPolicy接口,那只需要配置前者
          滚动策略;TimeBasedRollingPolicy(时间基准滚动策略,目前流行使用的策略)    SizeAndTimeBasedRollingPolicy(按日期对文件进行存档策略)

  appender的子标签
    <filter> :logback具有过滤支持。logback允许给日志记录器appender配置一个或多个Filter,当满足过滤器指定的条件时,才记录日志。
             LevelFilter:对指定level的日志进行记录,不等于指定level的日志不记录
             ThresholdFilter:对指定level的日志进行记录,对不等于指定level的日志不记录 (为系统定义的拦截器)
             EvaluatorFilter:对满足指定表达式的日志进行记录,对不满足指定表达式的日志不做记录。
             MDCFilter
  logger标签:用来指定某一个包或者具体某一个类的日志打印级别,以及指定使用那个appender(输出目的地的意思)
           属性有name, level,additivity(可加性)
           name属性:用来指定受此约束的某一个包或者具体的某一个类
           level属性:用来设置打印级别,大小写无关:TRACE,DEBUG,INFO,WARN,ERROR,ALL
           additivity属性:是否向上级logger传递打印信息,默认为true
           logger中可以有多个appender-ref (输出端控制项)
           示例:<logger name="com.example" additivity="false" level="ERROR">
                   <appender-ref ref="error"/>
                </logger>
                控制com.example包下的日志打印,打印级别为ERROR,additivity属性为false,表示此logger的打印信息不在向上级传递,指定了名字为error的appender
  root标签:用来指定最基础的日志输出级别,可以理解为根logger,只有一个level属性,默认是DEBUG.  root可以包含零个或多个<appender_ref>元素
-->
<configuration scan="true"  scanPeriod="60 seconds"    debug="false">
    <!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
    <!-- 日志输出规则  根据当前ROOT 级别,日志输出时,级别高于root默认的级别时  会输出 -->
    <!-- %n为换行的意思   %X{X-B3-TraceId}/%X{X-B3-SpanId} 表是打印的traceId,链路追踪的探针标记(链路追踪是可以自己实现的)-->
    <!-- 以下  每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->
    <!--<property name="SERVER_HOME" value="../logs/"/>-->
    <property name="LOG_DIR" value="/Users/tyw/Documents/2023持续学习/学习资料/logback_log"/>

    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date %level [%thread-%X{X-B3-TraceId}/%X{X-B3-SpanId}] %logger{10} [%file:%line]
                %msg%n
            </pattern>
            <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
    <!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是demo.log -->
    <!--             2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名-->

    <appender name="error_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIR}/error.log</file>
        <encoder>
            <pattern>%date %level [%thread] %logger{30} [%file:%line] %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/logs/error.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
            <maxHistory>5</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1kb</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!--级别过滤器  根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMtach 和onMismatch接受或决绝日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="info_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIR}/info.log</file>
        <encoder>
            <pattern>%date %level [%thread] %logger{30} [%file:%line] %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/logs/info.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
            <maxHistory>5</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1kb</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!--级别过滤器  根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMtach 和onMismatch接受或决绝日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
    <logger name="org.apache.zookeeper" level="WARN"/>
    <logger name="org.springframework" level="WARN" additivity="false"/>
    <logger name="org.mybatis" level="WARN"/>
    <logger name="com.tyw" level="DEBUG"/>

    <!-- com.xianzhi为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
    <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->

    <root level="info">
        <appender-ref ref="stdout"/>
        <appender-ref ref="info_file"/>
        <appender-ref ref="error_file"/>

    </root>
</configuration>

最后的效果:写个demoController测试就行

logback配置文件是用来配置logback日志框架的文件。在配置文件中,有几个重要的节点需要注意。首先是根节点configuration,它是配置文件的根节点,用来包含所有的配置信息。\[1\]其次是logger节点,用来配置具体的日志记录器。可以通过name属性指定要配置的包或类的全路径,通过level属性指定日志级别,通过additivity属性指定是否将日志信息传递给上级记录器。\[2\]最后是appender节点,用来配置日志输出的目标。可以通过ref属性指定要使用的appender,例如STDOUT表示输出到控制台。\[3\]通过配置这些节点,可以实现对不同包或类的日志级别和输出目标的灵活配置。 #### 引用[.reference_title] - *1* [logback配置文件详解](https://blog.csdn.net/yueyezhufeng/article/details/126303307)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [logback 配置详解](https://blog.csdn.net/qq_41239465/article/details/129987904)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值