1.新增application.properties配置
logging.config=classpath:logback-spring.xml
spring.profiles.active=dev
將項目部署到服務器時需要將dev修改為test后再進行打包部署
2.新增logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><springProfile name="dev"><!--輸出到控制臺--><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n%ex</pattern></encoder></appender><root level="info"><appender-ref ref="console" /></root></springProfile><springProfile name="prod,test"><!--ERROR級別的日志放在logErrorDir目錄下,INFO級別的日志放在logInfoDir目錄下--><property name="logback.logErrorDir" value="/root/lottery-system/logs/error"/><property name="logback.logInfoDir" value="/root/lottery-system/logs/info"/><property name="logback.appName" value="lotterySystem"/><contextName>${logback.appName}</contextName><!--ERROR級別的日志配置如下--><appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--日志名稱,如果沒有File 屬性,那么只會使用FileNamePattern的文件路徑規則如果同時有<File>和<FileNamePattern>,那么當天日志是<File>,明天會自動把今天的日志改名為今天的日期。即,<File> 的日志都是當天的。--><File>${logback.logErrorDir}/error.log</File><!-- 日志level過濾器,保證error.***.log中只記錄ERROR級別的日志--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><!--滾動策略,按照時間滾動 TimeBasedRollingPolicy--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--文件路徑,定義了日志的切分方式——把每一天的日志歸檔到一個文件中,以防止日志填滿整個磁盤空間--><FileNamePattern>${logback.logErrorDir}/error.%d{yyyy-MM-dd}.log</FileNamePattern><!--只保留最近14天的日志--><maxHistory>14</maxHistory><!--用來指定日志文件的上限大小,那么到了這個值,就會刪除舊的日志--><!--<totalSizeCap>1GB</totalSizeCap>--></rollingPolicy><!--日志輸出編碼格式化--><encoder><charset>UTF-8</charset><pattern>%d [%thread] %-5level %logger{36} %line - %msg%n%ex</pattern></encoder></appender><!--INFO級別的日志配置如下--><appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--日志名稱,如果沒有File 屬性,那么只會使用FileNamePattern的文件路徑規則如果同時有<File>和<FileNamePattern>,那么當天日志是<File>,明天會自動把今天的日志改名為今天的日期。即,<File> 的日志都是當天的。--><File>${logback.logInfoDir}/info.log</File><!--自定義過濾器,保證info.***.log中只打印INFO級別的日志, 填寫全限定路徑--><filter class="org.example.lotterysystem.common.filter.InfoLevelFilter"/><!--滾動策略,按照時間滾動 TimeBasedRollingPolicy--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--文件路徑,定義了日志的切分方式——把每一天的日志歸檔到一個文件中,以防止日志填滿整個磁盤空間--><FileNamePattern>${logback.logInfoDir}/info.%d{yyyy-MM-dd}.log</FileNamePattern><!--只保留最近14天的日志--><maxHistory>14</maxHistory><!--用來指定日志文件的上限大小,那么到了這個值,就會刪除舊的日志--><!--<totalSizeCap>1GB</totalSizeCap>--></rollingPolicy><!--日志輸出編碼格式化--><encoder><charset>UTF-8</charset><pattern>%d [%thread] %-5level %logger{36} %line - %msg%n%ex</pattern></encoder></appender><root level="info"><appender-ref ref="fileErrorLog" /><appender-ref ref="fileInfoLog"/></root></springProfile>
</configuration>
配置Info級別日志的時候需要將<filter>中的類路徑修改為對應的路徑
3.自定義過濾器(目的是過濾出Info級別日志)
InfoLevelFilter.java
package org.example.lotterysystem.common.filter;import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;public class InfoLevelFilter extends Filter<ILoggingEvent> {@Overridepublic FilterReply decide(ILoggingEvent iLoggingEvent) {if (iLoggingEvent.getLevel().toInt() == Level.INFO.toInt()){return FilterReply.ACCEPT;}return FilterReply.DENY;}
}