SpringBoot LogBack日志配置

SpringBoot默认使用的是LogBack日志,只需引入spring-boot-starter或者spring-boot-starter-web依赖即可使用LogBack

resources目录下新建 logback-spring.xml文件

文件具体配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <!--格式化输出:%d表示日期,%thread表示线程名,%logger 日志输出者的名字,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->

    <!-- 定义日志文件的存储地址,勿在LogBack的配置中中使用相对路径 -->
    <property name="LOG_HOME" value="/logs"/>

    <!-- 定义一个控制台输出器,名为CONSOLE-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}-[%thread] - %clr(%-5.5p) - %clr(%-50.60logger{50}){cyan} - %-4.4L - %clr(%8X{token}){yellow} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 定义Info级别输出器,名为INFO_FILE,只记录INFO级别日志-->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--    IFNO级别日志被appender日志处理,其他级别日志直接拒绝    -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 文件输出格式 -->
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}]-[%thread]- %-5level - %-50.60logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 文件路径 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名称 -->
            <fileNamePattern>${LOG_HOME}/java_api.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 文件最大保存历史数量 -->
            <MaxHistory>30</MaxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
    </appender>

    <!-- 定义error和warn级别输出器,名为ERROR_FILE,直接录error和warn级别输出器-->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--    ERROR级别日志立即记录,其他级别日志丢给下一个过滤器处理    -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <!--    ERROR级别日志立即记录,不匹配的直接拒绝    -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 文件输出格式 -->
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}]-[%thread]- %-5level - %-50.60logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 文件路径 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名称 -->
            <fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 文件最大保存历史数量 -->
            <MaxHistory>30</MaxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
    </appender>
    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

    <logger name="jdbc.sqltiming" level="debug"/>
    <logger name="com.ibatis" level="debug"/>
    <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="debug"/>
    <logger name="com.ibatis.common.jdbc.ScriptRunner" level="debug"/>
    <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="debug"/>
    <logger name="java.sql.Connection" level="debug"/>
    <logger name="java.sql.Statement" level="debug"/>
    <logger name="java.sql.PreparedStatement" level="debug"/>
    <logger name="java.sql.ResultSet" level="debug"/>
    <logger name="org.springframework" level="warn"/>
    <logger name="org.mybatis.spring" level="warn"/>
    <logger name="org.apache.commons" level="warn"/>
    <logger name="org.apache.http" level="warn"/>
    <logger name="org.apache.commons.beanutils.converters" level="warn"/>
    <logger name="org.hibernate" level="warn"/>
    <logger name="org.apache.catalina.core.ContainerBase" level="warn"/>
    <logger name="springfox.documentation" level="warn"/>

    <!--    开发环境日志配置    -->
    <springProfile name="dev">
        <root level="DEBUG">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
        </root>
    </springProfile>

    <!--    测试环境日志配置    -->
    <springProfile name="test">
        <root level="DEBUG">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
        </root>
    </springProfile>

    <!--    生产环境日志配置    -->
    <springProfile name="prod">
        <root level="DEBUG">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
        </root>
    </springProfile>
</configuration>

 

 

filter过滤器

ch.qos.logback.classic.filter.LevelFilter 级别过滤器,根据日志级别进行过滤
通过OnMatch和OnMissMatch来处理日志
OnMatch:
  ACCEPT   匹配日志级别则立即被记录
  DENY    匹配日志级别则立即抛弃日志,且不经过下一个过滤器
  NEUTRAL  匹配日志级别则丢给下一个过滤器来处理

OnMissMatch:
  ACCEPT  不匹配日志级别则立即记录日志
  DENY    不匹配日志级别则立即抛弃日志,且不经过下一个过滤器
  NEUTRAl  不匹配日志级别则丢给下一个过滤器来处理

还有其他的一些过滤器如下
ch.qos.logback.classic.filter.ThresholdFilter 临界值过滤器,过滤掉低于指定临界值的日志
ch.qos.logback.core.filter.EvaluatorFilter  求值过滤器,评估、鉴别日志是否符合指定条件

 

posted @ 2020-12-31 17:04  露天窗  阅读(181)  评论(0编辑  收藏  举报