在 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;
}
}
}