logback日志配置在springboot,logback.xml配置,自动提示,约束,命名空间等一些配置详解,以及配置日志后控制台无法打印异常信息

logback日志xml配置详解,包含每个标签的作用,防止忘记或者直接复制即可使用,需注意应将该文件命名为logback.xml或者logback-spring.xml,放在resource下

<?xml version="1.0" encoding="utf-8" ?>

<!--此处可以写入命名空间,自动提示,将下面的粘贴后,将鼠标放在raw.githubusercont这个网址上,点击alt+enter,选择fetch导入即可拥有自动提示-->
<configuration xmlns="http://ch.qos.logback/xml/ns/logback"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback
               https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
<!--注:配置文件中级别不区分大小写-->
<!--此处不做讲解,此处为处理配置日志后控制台无法打印异常信息的错误,详解见root节点开始-->
<appender name="rootApp" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %19d{yyyy-MM-dd HH:mm:ss}--%highlight(%-5level)--[%15.15(%thread)]--%cyan(%-40.40(%logger{40}):%line) : %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
<!--设置根记录器级别,默认为debug,当然你也可以不设置,在springBoot中默认为info-->
    <root level="info">
        <appender-ref ref="rootApp"></appender-ref>
    </root>


<!--    附加器,是负责写日志的组件,主要负责将日志写入文件或者控制台,name表示名字,自己随意设置,后面的记录器将配置通过name来选择附加器-->
<!--    class表示附加器的实现类,logback自带有三个,根据需求自行选择使用,-->
<!--    第一个:ch.qos.logback.core.ConsoleAppender将日志输出到控制台,-->
<!--    第二个:ch.qos.logback.core.FileAppender将日志输出到文件-->
<!--    第三个滚动文件附加器:ch.qos.logback.core.rolling.RollingFileAppender-->
<!--    下面示例了三种附加器-->
<!--    1.控制台附加器-->
    <appender name="LOGIN_USER_FEATURE_CONSLOG" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 默认情况下,每个日志事件都会立即刷新到基础输出流。这种默认方法更安全,因为如果应用程序在没有正确关闭appender的情况下退出,则日志事件不会丢失 -->
            <!-- 但为了显着增加日志记录吞吐量,可以将immediateFlush属性设置为false -->
            <!--        <immediateFlush>true</immediateFlush>-->
<!--           日志模板,即输出的日志格式-->
            <pattern>
                <!--%d表示日期,自动填写,{yyyy-MM-dd HH:mm:ss}表示时间的格式,我们可以修改格式如{yyyy-MM-dd HH:mm}记录到分种,或者直接用%dat即可,与其效果一致-->
                <!--对于%d我们也可以规定其长度,如%30date,表示长30个字符,不够的左侧空格补齐,在%-30date加负号表示右侧补齐,这种加数字长度可以适用于所有-->
                <!-- %class表示打印日志的语句在哪个类中-->
                <!-- %line表示打印日志语句在哪一行 -->
                <!--%level表示日志级别-->
                <!-- %thread表示打印日志的语句所在线程的名字 -->
                <!-- %15.15():括号内填内容,如%15.15(%thread)则表示线程名字符长度小于15(第一个)则用空格在左侧补齐,如果字符长度大于15(第二个),则从开头开始截断多余的字符 -->
                <!-- %msg:打印日志消息,即为我们代码中填写的消息,如log.info("ccc"),则%msg会打印ccc -->
                <!-- %n:换行符,一般用于最后,下一条日志换行打印 -->
                <!-- %highlight():转换说明符,括号内填内容,如%highlight(%level)以粗体红色显示其级别为ERROR的事件,红色为WARN,BLUE为INFO,以及其他级别的默认颜色 -->
                <!--%red(),红色显示,括号填内容,如%red(%date{yyyy-MM-dd HH:mm:ss})表示红色显示日期,red可变,如%blue()-->
                <!--%logger{40}——日志输出者的名字-->
                %22d{yyyy-MM-dd HH:mm:ss}--%highlight(%-5level)--[%15.15(%thread)]--%cyan(%-40.40(%logger{40}):%line) : %msg%n
            </pattern>
            <!--输出编码 UTF-8 -->
            <charset>UTF-8</charset>
        </encoder>
<!--        过滤器,可以只记录符合级别的日志,如下,只记录info级别的,写法如下示例-->

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
<!-- 过滤器,class有两个类,另一个ch.qos.logback.classic.filter.ThresholdFilter
写法如下示例,表示比info级别高的均可输出,当不写过滤器时,默认采用此配置,级别与记录器一致-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>
    </appender>

<!--    2.文件附加器,在该附加器需要指定日志输出的文件路径,可以是绝对路径,也可以只指定文件名,默认放在项目路径下-->
    <appender name="LOGIN_USER_FEATURE_FILE" class="ch.qos.logback.core.FileAppender">
        <encoder>
            <!--           日志模板,即输出的日志格式-->
            <pattern>
                %22d{yyyy-MM-dd HH:mm:ss}--%highlight(%-5level)--[%15.15(%thread)]--%cyan(%-40.40(%logger{40}):%line) : %msg%n
            </pattern>
        </encoder>
        <!--日志输出的路径 -->
        <file>D:/log/logfile.log</file>
<!--        日志追加,即true表示在以前的日志后追加日志,false表示覆盖掉以前的日志,一般用true-->
        <append>true</append>
    </appender>


<!--    3.滚动文件附加器,在该文件中需要设置文件路径以及滚动策略,常用滚动策略有两种,在下面有解释-->
    <appender name="LOGIN_USER_FEATURE_ROLLFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>
                %22d{yyyy-MM-dd HH:mm:ss}--%highlight(%-5level)--[%15.15(%thread)]--%cyan(%-40.40(%logger{40}):%line) : %msg%n
            </pattern>
        </encoder>
        <!--日志输出的路径 -->
        <file>D:/log2/logfile.log</file>
        <append>true</append>
        <!--class:滚动策略,两种,
                1.基于时间的策略ch.qos.logback.core.rolling.TimeBasedRollingPolicy,如每天或者每小时生成一个日志文件
                2.基于时间和日志文件大小SizeAndTimeBasedRollingPolicy,该策略既根据时间,也根据文件大小-->
        <!--示例1.基于时间的策略ch.qos.logback.core.rolling.TimeBasedRollingPolicy -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名生成模式,如按日期中的每天来生成日志文件,填入%d{yyyy-MM-dd}.log ,如按秒 %d{yyyy-MM-dd HH-mm-ss},如按年创建目录,文件放在年份下%d{yyyy/MM-dd}
            其于<file>区别在于,当前也就是今天的日志记录会记录在<file>的D:/log2/logfile.log文件中,
            今天过去,则会将logfile.log文件名修改为<fileNamePattern>设置的文件名-->
            <fileNamePattern>roll_%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--历史日志数量,如3则表示,保存最近3个的日志文件,3个以前的删除-->
            <maxHistory>3</maxHistory>
            <!--该策略下所有的日志文件总大小,如5GB示,总大小不超过5GB,超过则把以前的删除-->
            <totalSizeCap>5GB</totalSizeCap>
        </rollingPolicy>

        <!--示例2.基于时间和大小的策略,与基于时间策略相比,其多一个属性<maxFileSize>,
        并且<fileNamePattern>属性需要设置下标,如%i,表示当天文件超过大小,新建一个今天的日志文件1(从0开始)继续写入日志 -->
   <!-- <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>rollSizeTime_%d{yyyy-MM-dd}%i.log</fileNamePattern>
            <maxHistory>3</maxHistory>
            <totalSizeCap>5GB</totalSizeCap>
            单个日志文件最大大小
            <maxFileSize>50MB</maxFileSize>
        </rollingPolicy>  -->
    </appender>



<!--设置记录器,名字、日志级别自行设置-->
    <logger name="com.yanzi.config.myIntercepter.MyIntercepter" level="INFO">
<!--        通过ref引入附加器名字name,表示该纪录器使用这个附加器,可以指定多个附加器,例如既使用控制台又使用文件,就会在控制台和文件均输出日志-->
        <appender-ref ref="LOGIN_USER_FEATURE_CONSLOG"></appender-ref>
        <appender-ref ref="LOGIN_USER_FEATURE_FILE"></appender-ref>
    </logger>

    <logger name="com.yanzi.controller.FileController" level="error">
        <!--        通过ref引入附加器名字name,表示该纪录器使用这个附加器,可以指定多个附加器,例如既使用控制台又使用文件,就会在控制台和文件均输出日志-->
        <appender-ref ref="LOGIN_USER_FEATURE_FILE"></appender-ref>
    </logger>

    <!-- 定义日志文件的存储地址和前缀名,简单说就是定义变量,后面可以使用${xx}来使用变量,如需使用请将这样的内容提至更上方 -->
    <!--示例,我有不同类型日志,但是都放在一个文件下,一改文件夹,所有日志路径配置都需要改,此时可以使用该属性,即相同字符串可以使用名字
    示例:D:/log文件夹用log_HOME表示,如果使用D:/log/ceshi.log,可以用${LOG_HOME}/ceshi.log表示}
    当然,不仅是路径可以使用-->
    <property name="LOG_HOME" value="D/log"/>
    
    
</configuration>

需注意,logback-spring.xml比logback.xml多了一个环境标签,可以切换环境,如dev开发环境,生产环境等

如果配置日之后出现控制台无法打印异常信息

应该此时将root节点配置附加器appender,示例如下,此时即可正常打印

<appender name="rootApp" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %19d{yyyy-MM-dd HH:mm:ss}--%highlight(%-5level)--[%15.15(%thread)]--%cyan(%-40.40(%logger{40}):%line) : %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
<!--注:配置文件中级别不区分大小写-->
<!--设置根记录器级别,默认为debug,当然你也可以不设置,在springBoot中默认为info-->
    <root level="info">
        <appender-ref ref="rootApp"></appender-ref>
    </root>