發如今線上的時候,日誌沒法按日期分割的問題,全部日誌都在第一天部署的那個日期的文件裏面。html
背景是Springboot + logbackjava
緣由是:mysql
以前是:linux
用timeBaseRollingPolicy來設定日誌保留日期和格式:sql
用sizeBaseTriggerPolicy來設定最大日誌文件數據庫
可是!!!apache
基於時間的滾動切割策略 TimeBasedRollingPolicy
,天天0點自動生成一份新的日誌文件,但裏面包含了一段 triggeringPolicy
觸發策略,即最大單個文件超過 10MB 自動新成新日誌文件, TimeBasedRollingPolicy
是基於時間的,不能和其餘策略一塊兒組合使用。app
也就是說這兩個policy是衝突的。異步
解決方法:ide
改用使用時間和大小組合策略 SizeAndTimeBasedRollingPolicy:
順便上最後完整的配置文件:
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定義日誌文件的存儲地址 勿在 LogBack 的配置中使用相對路徑--> <property name="LOG_HOME" value="log" /> <!-- linux上用絕對路徑試試 --> <!-- <property name="LOG_HOME" value="/home/inforPoint/log" /> --> <!-- 控制檯輸出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- 格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符 --> <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> --> <pattern>%red(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %black(${PID}) --- %green([%thread]) %boldMagenta(%logger{50}) : %cyan(%msg%n)</pattern> </encoder> </appender> <!-- 按照天天生成日誌文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <!--過濾掉error的級別--> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <!-- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 日誌文件輸出的文件名 <FileNamePattern>${LOG_HOME}/inforPoint_log_%d{yyyy-MM-dd}.log</FileNamePattern> 日誌文件保留天數 <MaxHistory>5</MaxHistory> </rollingPolicy> --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 以前的 rollingPolicy和triggeringPolicy衝突了 用一個新的標籤 結合二者 --> <!-- 日誌文件輸出的文件名 --> <FileNamePattern>${LOG_HOME}/inforPoint_log_%d{yyyy-MM-dd}_%i.log</FileNamePattern> <!-- 日誌文件保留天數 --> <MaxHistory>5</MaxHistory> <!-- 日誌文件最大尺寸 --> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID} --- [%thread] %logger{50} - %msg%n</pattern> </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"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level><!--//打印error--> </filter> <!-- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 日誌文件輸出的文件名 <FileNamePattern>${LOG_HOME}/inforPoint_error_log_%d{yyyy-MM-dd}.log</FileNamePattern> 日誌文件保留天數 <MaxHistory>5</MaxHistory> </rollingPolicy> --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 以前的 rollingPolicy和triggeringPolicy衝突了 用一個新的標籤 結合二者 --> <!-- 日誌文件輸出的文件名 --> <FileNamePattern>${LOG_HOME}/inforPoint_error_log_%d{yyyy-MM-dd}_%i.log</FileNamePattern> <!-- 日誌文件保留天數 --> <MaxHistory>5</MaxHistory> <!-- 日誌文件最大尺寸 --> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID} --- [%thread] %logger{50} - %msg%n</pattern> </encoder> <!--日誌文件最大的大小--> <!-- <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> --> </appender> <!--myibatis log configure--> <logger name="com.apache.ibatis" level="TRACE"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/> <!-- 多是比較新的版本,會有不少thymeleaf configuration的日誌,因此設個等級來避免 --> <logger name="org.thymeleaf.TemplateEngine.CONFIG" level="WARN" /> <!-- 日誌輸出級別 --> <root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> <appender-ref ref="ERROR_FILE" /> </root> <!--日誌異步到數據庫 --> <!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">--> <!--<!–日誌異步到數據庫 –>--> <!--<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">--> <!--<!–鏈接池 –>--> <!--<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">--> <!--<driverClass>com.mysql.jdbc.Driver</driverClass>--> <!--<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>--> <!--<user>root</user>--> <!--<password>root</password>--> <!--</dataSource>--> <!--</connectionSource>--> <!--</appender>--> </configuration>
參考博客:
http://www.ibloger.net/article/3199.html——《坑爹的Logback日誌沒法按天切割問題》