日志配置logback-spring.xml


參考官方網址: https://logging.apache.org/log4j/2.x

一、log4j日志級別配置說明

log4j提供了4種日志級別和2個日志開關。

DEBUG:輸出調試信息;指出細粒度信息事件對調試應用程序是非常有幫助的。 
INFO: 輸出提示信息;消息在粗粒度級別上突出強調應用程序的運行過程。 
WARN: 輸出警告信息;表明會出現潛在錯誤的情形。 
ERROR:輸出錯誤信息;指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。 
FATAL: 輸出致命錯誤;指出每個嚴重的錯誤事件將會導致應用程序的退出。 
ALL level:打開所有日志記錄開關;是最低等級的,用於打開所有日志記錄。 
OFF level:關閉所有日志記錄開關;是最高等級的,用於關閉所有日志記錄。

按照范圍從小到大排序:OFF level > FATAL > ERROR > WARN > INFO > DEBUG > ALL level;范圍大的會包含范圍小的,例如日志設置為INFO級別的話則FATAL、ERROR、WARN、INFO的日志開關都是打開的,而DEBUG的日志開關將是關閉的。

Log4j建議只使用四個級別,優先級從高到低分別是 ERROR、WARN、INFO、DEBUG。

二、logback-spring.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 說明:
    1、日志級別及文件 日志記錄采用分級記錄,級別與日志文件名相對應,不同級別的日志信息記錄到不同的日志文件中。
    2、日志級別可以根據開發環境進行配置,為方便統一管理查看日志,日志文件路徑統一由LOG_PATH:-.配置在/home/項目名稱/logs
-->
<configuration>
    <!-- 引入默認設置 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <!-- 編碼格式設置 -->
    <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} [%thread] %-5level %logger{50}.%method@%line - %msg%n"/>
    <!-- 彩色輸出格式:magenta:洋紅,boldMagenta:粗紅,cyan:青色 -->
    <property name="CONSOLE_LOG_PATTERN" value="%boldMagenta([%d{yyyy-MM-dd HH:mm:ss.SSS}]) %red([%thread]) %boldMagenta(%-5level) %blue(%logger{66}.%method()@%line) %magenta(·═>) %cyan(%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">
        <file>${LOG_HOME}/system-info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天回滾 daily -->
            <FileNamePattern>${LOG_HOME}/system-info.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!-- 日志文件保留天數 -->
            <MaxHistory>30</MaxHistory>
        </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.TimeBasedRollingPolicy">
            <!-- 按天回滾 daily -->
            <FileNamePattern>${LOG_HOME}/system-error.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!-- 日志文件保留天數 -->
            <MaxHistory>30</MaxHistory>
        </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>
        <!-- 日志文件最大的大小 -->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- ==========================用戶登錄日志設置========================== -->
    <appender name="USER_LOGIN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/user-login.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天回滾 daily -->
            <fileNamePattern>${LOG_HOME}/auth-user.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的歷史 30天 -->
            <maxHistory>30</maxHistory>
        </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"/>
    <!-- 用戶登錄日志 -->
    <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>

注意:登錄日志的記錄還需進行以下配置,用lombok的話直接使用注解即可 @Slf4j(topic = "user-login")

配置效果如下:

 


免責聲明!

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



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