springboot 記錄打印日誌到本地文件夾

<?xml version="1.0" encoding="UTF-8"?>
<!-- 說明: 1、日誌級別及文件 日誌記錄採用分級記錄,級別與日誌文件名相對應,不同級別的日誌信息記錄到不同的日誌文件中 例如:error級別記錄到log_error_xxx.log或log_error.log(該文件爲當前記錄的日誌文件),而log_error_xxx.log爲歸檔日誌,
		日誌文件按日期記錄,同一天內,若日誌文件大小等於或大於2M,則按0、1、2...順序分別命名 例如log-level-2013-12-21.0.log
		其它級別的日誌也是如此。 2、文件路徑 若開發、測試用,在Eclipse中運行項目,則到Eclipse的安裝路徑查找logs文件夾,以相對路徑../logs。
		若部署到Tomcat下,則在Tomcat下的logs文件中 3、Appender FILEERROR對應error級別,文件名以log-error-xxx.log形式命名
		FILEWARN對應warn級別,文件名以log-warn-xxx.log形式命名 FILEINFO對應info級別,文件名以log-info-xxx.log形式命名
		FILEDEBUG對應debug級別,文件名以log-debug-xxx.log形式命名 stdout將日誌信息輸出到控制上,爲方便開發測試使用 -->
<configuration>

    <!--ip解析-->
    <conversionRule conversionWord="ip" converterClass="cn.zx.webapp.configuration.IpConvert"/>
    <!-- magenta:洋紅 -->
    <!-- boldMagenta:粗紅-->
    <!-- cyan:青色 -->
    <!--︻$════>-->
    <!--︻⊱═════>-->
    <property name="CONSOLE_LOG_PATTERN"
              value="%boldMagenta([%d{yyyy-MM-dd HH:mm:ss.SSS}]) %green([%ip]) %cyan([%X{requestId}]) %boldMagenta(%-5level) %blue(%logger{15}) %red([%thread])   %magenta(︻⊱═════>) %cyan(%msg%n)"/>

    <!--引入默認的一些設置 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <!--寫入日誌到控制檯的appender,以java -jar xx.jar 啓動會亂碼 需要去掉 charset-->
    <appender name="CONSOLE"
              class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!--<charset>UTF-8</charset>&lt;!&ndash; 此處設置字符集 &ndash;&gt;-->
        </encoder>
    </appender>


    <!-- 日誌文件的存儲地址 -->
    <property name="LOG_HOME"
              value="${LOG_PATH:-.}" />


    <!--寫入INFO日誌到文件的appender -->
    <appender name="INFO_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--如果只是想要 Info 級別的日誌,只是過濾 info 還是會輸出 Error 日誌,因爲 Error 的級別高, 所以我們使用下面的策略,可以避免輸出
            Error 的日誌 -->
        <!-- 此日誌文檔只記錄info級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>                     <!--設置攔截的對象爲INFO級別日誌 -->
            <onMatch>ACCEPT</onMatch>               <!-- 當遇到了info級別時,啓用改段配置. -->
            <onMismatch>DENY</onMismatch>           <!-- 沒有遇到info級別日誌時,屏蔽改段配置 -->
        </filter>

        <File>${LOG_HOME}/zx-info.log</File>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/zx-info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--日誌文檔保留天數 -->
            <maxHistory>10</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <!-- 注意 logback 的括號需要轉義 -->
        <encoder charset="UTF-8"
                 class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level \(%F:%L\)
                %logger{10} %method\(\) - %m%n
            </pattern>
            <charset>UTF-8</charset><!-- 此處設置字符集 -->
        </encoder>
    </appender>


    <!--寫入DEBUG日誌到文件的appender -->
    <appender name="DEBUG_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 此日誌文檔只記錄DEBUG級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <File>${LOG_HOME}/zx-debug.log</File>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/zx-debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--日誌文檔保留天數 -->
            <maxHistory>10</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <!-- 注意 logback 的括號需要轉義 -->
        <encoder charset="UTF-8"
                 class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level \(%F:%L\)
                %logger{10} %method\(\) - %m%n
            </pattern>
            <charset>UTF-8</charset><!-- 此處設置字符集 -->
        </encoder>
    </appender>


    <!--寫入ERROR日誌到文件的appender -->
    <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>DENY</onMismatch>
        </filter>

        <File>${LOG_HOME}/zx-error.log</File>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/zx-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--日誌文檔保留天數 -->
            <maxHistory>10</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <!-- 注意 logback 的括號需要轉義 -->
        <encoder charset="UTF-8"
                 class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level \(%F:%L\)
                %logger{10} %method\(\) - %m%n
            </pattern>
            <charset>UTF-8</charset><!-- 此處設置字符集 -->
        </encoder>
    </appender>

    <!--寫入WARN日誌到文件的appender -->
    <appender name="WARN_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 此日誌文檔只記錄WARN級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <File>${LOG_HOME}/zx-warn.log</File>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/zx-warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--日誌文檔保留天數 -->
            <maxHistory>10</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <!-- 注意 logback 的括號需要轉義 -->
        <encoder charset="UTF-8"
                 class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level \(%F:%L\)
                %logger{10} %method\(\) - %m%n
            </pattern>
            <charset>UTF-8</charset><!-- 此處設置字符集 -->
        </encoder>
    </appender>


    <!--生產環境:打印控制檯和輸出到文件 -->
    <springProfile name="pro">
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="ERROR_FILE"/>
        </root>
    </springProfile>

    <!--開發環境:打印控制檯 -->
    <springProfile name="dev">
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="DEBUG_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
            <appender-ref ref="WARN_FILE"/>
        </root>
    </springProfile>

    <!--測試環境:打印控制檯 -->
    <springProfile name="test">
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
            <appender-ref ref="WARN_FILE"/>
        </root>
    </springProfile>

</configuration>

logback-spring.xml文件;  

<!-- 日誌文件的存儲地址 -->

<property name="LOG_HOME" value="${LOG_PATH:-.}" />  獲取在yml中配置的路徑;例如:

logging:
  path: /home/logs/xxx/log/  不寫磁盤默認在本項目下.

 RollingFileAppender:  file(String) 指定日誌文件的位置滾動策略 


 RollingPolicy: 
   TimeBasedRollingPolicy 是目前最受歡迎的一種滾動方式,可以設置按天、按月的滾動。它同時實現了 RollingPolicy 和TriggeringPolicy 接口。它可以配置這些屬性:
  1. fileNamePattern (String) 比如:/var/log/%d{yyyy/MM, aux}/myapplication.%d{yyyy-MM-dd}.log ,這裏最重要的是 %d{},用它來格式化一個時間日期,作爲一個文件名。

  2. maxHistory (int) 最多保存的日誌數量

    %i 標記,它的使用場景是這樣的,如果log文件的大小達到了maxFileSize,但是時間還沒有達到滾動點,那麼會創建新的log文件,並用一個遞增的 %i 索引。

在RollingFileAppender還是需要設置file屬性來表示當前的寫入日誌的文件,但是當滾動時間到了,會按照fileNamePattern定義的規則來 歸檔當前的日誌寫入文件。logback會從 
fileNamePattern 中推導出滾動的間隔,上面的例子會按月創建日誌目錄、日誌文件會在每天0點歸檔。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章