springboot 錯誤日志與其它日志分開保存(每天)


在 resources 目錄下,添加logback-spring.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 說明:
    1、日志級別及文件 日志記錄采用分級記錄,級別與日志文件名相對應,不同級別的日志信息記錄到不同的日志文件中。
    2、日志級別可以根據開發環境進行配置,為方便統一管理查看日志,日志文件路徑統一由LOG_PATH:-.配置在/home/項目名稱/logs
-->
<!--  https://www.cnblogs.com/54hsh/p/12684241.html -->
<configuration>
    <!-- 引入默認設置 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!--自定義顏色配置-->
    <conversionRule conversionWord="customColor" converterClass="com.example.datasource.config.LogbackColorful"/>
    <!-- 編碼格式設置 -->
    <property name="ENCODING" value="UTF-8"/>
    <!-- 日志文件的存儲地址,由application.yml中的logging.path配置,根路徑默認同項目路徑 -->
    <property name="LOG_HOME" value="${LOG_PATH:-.}"/>
    <!-- 常規輸出格式:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符 -->
    <property name="NORMAL_LOG_PATTERN"
              value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level ${PID:- } [%15.15t]%logger{50}.%method()@%line : %msg%n"/>
    <!-- 彩色輸出格式:magenta:洋紅,boldMagenta:粗紅,cyan:青色 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %customColor(%-5level) %magenta(${PID:- }) [%15.15t] %cyan(%logger{50}.%method() @%line) : %msg%n"/>

    <!-- ==========================控制台輸出設置========================== -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset>
        </encoder>
    </appender>

    <!-- ==========================按天輸出日志設置========================== -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 按天回滾 daily -->
            <FileNamePattern>logs/%d{yyyy-MM-dd}/info/info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!-- 日志文件保留天數 -->
            <MaxHistory>30</MaxHistory>
            <maxFileSize>30MB</maxFileSize>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>             <!-- 設置攔截的對象為INFO級別日志 -->
            <onMatch>ACCEPT</onMatch>       <!-- 當遇到了INFO級別時,啟用該段配置 -->
            <onMismatch>DENY</onMismatch>   <!-- 沒有遇到INFO級別日志時,屏蔽該段配置 -->
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${NORMAL_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset>
        </encoder>
        <!-- 日志文件最大的大小 -->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- ==========================按天輸出ERROR級別日志設置========================== -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--        <file>${LOG_HOME}/system-error.log</file>-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 按天回滾 daily -->
            <FileNamePattern>logs/%d{yyyy-MM-dd}/error/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!-- 日志文件保留天數 -->
            <MaxHistory>30</MaxHistory>
            <maxFileSize>30MB</maxFileSize>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>            <!-- 設置攔截的對象為ERROR級別日志 -->
            <onMatch>ACCEPT</onMatch>       <!-- 當遇到了ERROR級別時,啟用該段配置 -->
            <onMismatch>DENY</onMismatch>   <!-- 沒有遇到ERROR級別日志時,屏蔽該段配置 -->
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${NORMAL_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset>
        </encoder>
    </appender>

    <!-- ==========================用戶登錄日志設置========================== -->
    <appender name="USER_LOGIN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 按天回滾 daily -->
            <fileNamePattern>logs/%d{yyyy-MM-dd}/login/login.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 日志文件保留天數 -->
            <MaxHistory>30</MaxHistory>
            <maxFileSize>30MB</maxFileSize>
        </rollingPolicy>
        <encoder>
            <pattern>${NORMAL_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset>
        </encoder>
    </appender>

    <!-- ===日志輸出級別,OFF level > FATAL > ERROR > WARN > INFO > DEBUG > ALL level=== -->
    <!--<logger name="com.sand" level="INFO"/>
    <logger name="com.apache.ibatis" level="INFO"/>
    <logger name="java.sql.Statement" level="INFO"/>
    <logger name="java.sql.Connection" level="INFO"/>
    <logger name="java.sql.PreparedStatement" level="INFO"/>
    <logger name="org.springframework" level="WARN"/>
    <logger name="com.baomidou.mybatisplus" level="WARN"/>-->
    <!-- 用戶登錄日志 -->
    <!-- 需要在代碼中編寫  private static final Logger logger= LoggerFactory.getLogger("user-login"); 來為個別類寫入特定的日志文件 -->
    <logger name="user-login" level="INFO">
        <appender-ref ref="USER_LOGIN"/>
    </logger>

    <!-- ======開發環境:打印控制台和輸出到文件====== -->
    <springProfile name="dev"><!-- 由application.yml中的spring.profiles.active配置 -->
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
        </root>
    </springProfile>

    <!-- ======測試環境:打印控制台和輸出到文件====== -->
    <springProfile name="test"><!-- 由application.yml中的spring.profiles.active配置 -->
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
        </root>
    </springProfile>

    <!-- ======生產環境:打印控制台和輸出到文件====== -->
    <springProfile name="prod"><!-- 由application.yml中的spring.profiles.active配置 -->
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
        </root>
    </springProfile>
</configuration>

自定義日志級別顯示的顏色

package com.example.datasource.config;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.pattern.color.ANSIConstants;
import ch.qos.logback.core.pattern.color.ForegroundCompositeConverterBase;

public class LogbackColorful extends ForegroundCompositeConverterBase<ILoggingEvent> {
    @Override
    protected String getForegroundColorCode(ILoggingEvent event) {
        Level level = event.getLevel();
        switch (level.toInt()){
            //ERROR等級為紅色
            case Level.ERROR_INT:
                return ANSIConstants.RED_FG;
            //WARN等級為黃色
            case Level.WARN_INT:
                return ANSIConstants.YELLOW_FG;
            //INFO等級為藍色
            case Level.INFO_INT:
                return ANSIConstants.BLUE_FG;
            //DEBUG等級為綠色
            case Level.DEBUG_INT:
                return ANSIConstants.GREEN_FG;
            //其他為默認顏色
            default:
                return ANSIConstants.DEFAULT_FG;
        }
    }
}


免責聲明!

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



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