logback-spring.xml配置


Spring2.x過后自帶日志工具就是Slf4j

使用 Spring Initializr 新建 Springboot 2.3.0.RELEASE 的項目

Spring Initializr

DEPENDENCY TREE

POM內容如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>net.add1s</groupId>
    <artifactId>slf4j-logback</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>slf4j-logback</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

資源文件夾resources下新建logback-spring.xml文檔

<?xml version="1.0" encoding="UTF-8"?>
<!--
    scan: 當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true。
    scanPeriod: 設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。默認的時間間隔為1分鍾。
    debug: 當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。
    configuration 子節點為 appender、logger、root
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!--用於區分不同應用程序的記錄-->
    <contextName>test-logback</contextName>

    <!--日志文件所在目錄,如果是tomcat,如下寫法日志文件會在則為${TOMCAT_HOME}/bin/logs/目錄下-->
<!--    <property name="LOG_HOME_WINDOWS" value="logs"/>-->
    <property name="LOG_HOME_WINDOWS" value="D:/code_resource/workspace_all/idea/slf4j-logback/src/main/resources/logs"/>
    <property name="LOG_HOME_LINUX" value="./logs"/>

    <!-- 彩色日志 -->
    <!-- 彩色日志依賴的渲染類 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式   [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n  -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <!--控制台-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度 %logger輸出日志的logger名 %msg:日志消息,%n是換行符 -->
<!--            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} : %msg%n</pattern>-->
            <pattern>${CONSOLE_LOG_PATTERN}</pattern><!--彩打日志-->
            <!--解決亂碼問題-->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--滾動文件-->
    <appender name="infoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- ThresholdFilter:臨界值過濾器,過濾掉 TRACE 和 DEBUG 級別的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME_WINDOWS}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--            <maxFileSize>100MB</maxFileSize>&lt;!&ndash;單個日志文件最大100M,到了這個值,就會再創建一個日志文件,日志文件的名字最后+1&ndash;&gt;-->
            <maxHistory>30</maxHistory><!--保存最近30天的日志-->
            <totalSizeCap>20GB</totalSizeCap><!--所有的日志文件最大20G,超過就會刪除舊的日志-->
        </rollingPolicy>
        <encoder>
            <charset>UTF-8</charset>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} : %msg%n</pattern>
        </encoder>
    </appender>

    <!--滾動文件-->
    <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- ThresholdFilter:臨界值過濾器,過濾掉 TRACE 和 DEBUG 級別的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>error</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME_WINDOWS}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--            <maxFileSize>100MB</maxFileSize>&lt;!&ndash;單個日志文件最大100M,到了這個值,就會再創建一個日志文件,日志文件的名字最后+1&ndash;&gt;-->
            <maxHistory>30</maxHistory><!--保存最近30天的日志-->
            <totalSizeCap>20GB</totalSizeCap><!--所有的日志文件最大20G,超過就會刪除舊的日志-->
        </rollingPolicy>
        <encoder>
            <charset>UTF-8</charset>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} : %msg%n</pattern>
        </encoder>
    </appender>

    <!--這里如果是info,spring、mybatis等框架則不會輸出:TRACE < DEBUG < INFO <  WARN < ERROR-->
    <!--root是所有logger的初始級,均繼承root,如果某一個自定義的logger沒有指定level,就會尋找父logger看有沒有指定級別,直到找到root。-->
<!--    <root level="debug">-->
<!--        <appender-ref ref="stdout"/>-->
<!--&lt;!&ndash;        <appender-ref ref="infoFile"/>&ndash;&gt;-->
<!--&lt;!&ndash;        <appender-ref ref="errorFile"/>&ndash;&gt;-->
<!--&lt;!&ndash;        <appender-ref ref="logstash"/>&ndash;&gt;-->
<!--    </root>-->

    <!--為某個包單獨配置logger

    比如定時任務,寫代碼的包名為:net.add1s.slf4j-logback
    步驟如下:
    1、定義一個appender,取名為task(隨意,只要下面logger引用就行了)
    appender的配置按照需要即可


    2、定義一個logger:
    <logger name="net.add1s.slf4j-logback" level="DEBUG" additivity="false">
      <appender-ref ref="task" />
    </logger>
    注意:additivity必須設置為false,這樣只會交給task這個appender,否則其他appender也會打印net.add1s.slf4j-logback里的log信息。

    3、這樣,在net.add1s.slf4j-logback的logger就會是上面定義的logger了。
    private static Logger logger = LoggerFactory.getLogger(Class1.class);
    -->

    <!--配置多環境日志輸出  可以在application.properties中配置選擇哪個profiles : spring.profiles.active=dev-->
    <!--開發環境:打印控制台-->
    <springProfile name="dev">
        <root level="debug">
            <appender-ref ref="stdout" />
            <appender-ref ref="infoFile" />
            <appender-ref ref="errorFile" />
        </root>
    </springProfile>
    <!--生產環境:輸出到文件-->
    <springProfile name="prd">
        <root level="info">
            <appender-ref ref="infoFile" />
            <appender-ref ref="errorFile" />
        </root>
    </springProfile>

</configuration>

application.yml內容

spring:
  application:
    name: slf4j-logback
  profiles:
    active: dev

---
# 開發環境配置
spring:
  profiles: dev
server:
  port: 1000

---
# 測試環境配置
spring:
  profiles: test
server:
  port: 1001

---
# 生產環境配置
spring:
  profiles: prd
server:
  port: 1002

參考

logback.xml/logback-spring.xml模板詳解(帶注釋)

slf4j+logback的配置及使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM