在這篇文章之前,實際對于 springboot和SLF4J+Logback日志框架的使用 我已經分享過3篇關于springboot 日志的文章了。為什么會在寫這篇最終篇,因為 前3篇分享的關于springBoot框架日志的配置方案,
發現了一個問題:只有項目啟動的時候會以日期創建一個文件夾,然后當第二天的時候,該觸發滾動策略的時候,創建新的日期文件夾,就不會觸發了。
這篇文章就是為了解決這個問題,我重新整理測試 寫了新的 關于 SLF4J+Logback日志框架的使用配置。如果后續又發現新的問題,我也會持續更新文章,也請小伙伴如果遇到相關問題,有解決方案大家多多交流學習。
先分享一下 以前3篇的文章地址:
第一篇:日志打印到控制臺及日志輸出到指定文件:
https://blog.csdn.net/Drug_/article/details/137913293
第二篇:日志上報到飛書或釘釘的解決方案
https://blog.csdn.net/Drug_/article/details/139143307
第三篇:解決mybatis-plus 將sql語句 輸出到日志文件
https://blog.csdn.net/Drug_/article/details/139351713
三篇文章都是解決不同的日志需求。
以下代碼 會包含上面文章里的所有需求配置并解決了上面說的日志第二天不創建文件夾的相關問題。
但是只會分享了 logback-spring.xml 文件,別的相關配置 請還參考上面3篇文章
那就直接上代碼了
大家按需使用即可
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds"><!-- 日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設置為WARN,則低于WARN的信息都不會輸出 --><!-- scan:當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true --><!-- scanPeriod:設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。默認的時間間隔為1分鐘。 --><!-- debug:當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。 --><springProperty scope="context" name="serviceName" source="spring.application.name" /><contextName>logback</contextName><!-- name的值是變量的名稱,value的值時變量定義的值。通過定義的值會被插入到logger上下文中。定義變量后,可以使“${}”來使用變量。 --><!-- 日志輸出位置--><property name="log.path" value="/home/logs/xxxService" /><!-- 彩色日志 --><!-- 配置格式變量:CONSOLE_LOG_PATTERN 彩色日志格式 --><!-- magenta:洋紅 --><!-- boldMagenta:粗紅--><!-- cyan:青色 --><!-- white:白色 --><!-- magenta:洋紅 --><property name="CONSOLE_LOG_PATTERN"value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%magenta(%msg%n)"/><!--輸出到控制臺--><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><!--此日志appender是為開發使用,只配置最底級別,控制臺輸出的日志級別是大于或等于此級別的日志信息--><!-- 例如:如果此處配置了INFO級別,則后面其他位置即使配置了DEBUG級別的日志,也不會被輸出 --><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter><encoder><Pattern>${CONSOLE_LOG_PATTERN}</Pattern><!-- 設置字符集 --><charset>UTF-8</charset></encoder></appender><!--輸出到文件--><!-- 時間滾動輸出 level為 INFO 日志 --><appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在記錄的日志文件的路徑及文件名 --><file>${log.path}/log_info.log</file><!--日志文件輸出格式--><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset></encoder><!-- 日志記錄器的滾動策略,按日期,按大小記錄 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 每天日志歸檔路徑以及格式 --><fileNamePattern>${log.path}/%d{yyyy-MM-dd,aux}/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 單個日志文件最多 200MB --><maxFileSize>200MB</maxFileSize><!-- 總日志文件最多 3G --><totalSizeCap>3GB</totalSizeCap><!--日志文件保留天數--><maxHistory>7</maxHistory></rollingPolicy><!-- 此日志文件只記錄info級別的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 時間滾動輸出 level為 WARN 日志 --><appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在記錄的日志文件的路徑及文件名 --><file>${log.path}/log_warn.log</file><!--日志文件輸出格式--><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset> <!-- 此處設置字符集 --></encoder><!-- 日志記錄器的滾動策略,按日期,按大小記錄 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/%d{yyyy-MM-dd,aux}/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 單個日志文件最多 200MB --><maxFileSize>200MB</maxFileSize><!-- 總日志文件最多 3G --><totalSizeCap>3GB</totalSizeCap><!--日志文件保留天數--><maxHistory>7</maxHistory></rollingPolicy><!-- 此日志文件只記錄warn級別的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>warn</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 時間滾動輸出 level為 ERROR 日志 --><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在記錄的日志文件的路徑及文件名 --><file>${log.path}/log_error.log</file><!--日志文件輸出格式--><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset> <!-- 此處設置字符集 --></encoder><!-- 日志記錄器的滾動策略,按日期,按大小記錄 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/%d{yyyy-MM-dd,aux}/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 單個日志文件最多 200MB --><maxFileSize>200MB</maxFileSize><!-- 總日志文件最多 3G --><totalSizeCap>3GB</totalSizeCap><!--日志文件保留天數--><maxHistory>7</maxHistory></rollingPolicy><!-- 此日志文件只記錄ERROR級別的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><appender name="SendErrorMsgAppender" class="com.xxx.init.exception.SendErrorMsgAppender"><!-- 此日志文件只記錄ERROR級別的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 時間滾動輸出 level為 mybatis debug 日志 只有debug模式mybatis 日志才會 所以必須開啟debug --><appender name="MYBATIS_DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在記錄的日志文件的路徑及文件名 --><file>${log.path}/log_mybatis_sql.log</file><!--日志文件輸出格式--><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset> <!-- 此處設置字符集 --></encoder><!-- 日志記錄器的滾動策略,按日期,按大小記錄 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/%d{yyyy-MM-dd,aux}/log-mybatis-sql-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 單個日志文件最多 200MB --><maxFileSize>200MB</maxFileSize><!-- 總日志文件最多 3G --><totalSizeCap>3GB</totalSizeCap><!--日志文件保留天數--><maxHistory>7</maxHistory></rollingPolicy><!-- 此日志文件只記錄DEBUG級別的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>DEBUG</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--<logger>用來設置某一個包或者具體的某一個類的日志打印級別、以及指定<appender>。<logger>僅有一個name屬性,一個可選的level和一個可選的addtivity屬性。name:用來指定受此logger約束的某一個包或者具體的某一個類。level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,如果未設置此屬性,那么當前logger將會繼承上級的級別。--><!--使用mybatis的時候,sql語句是debug下才會打印,而這里我們只配置了info,所以想要查看sql語句的話,有以下兩種操作:第一種把<root level="INFO">改成<root level="DEBUG">這樣就會打印sql,不過這樣日志那邊會出現很多其他消息第二種就是單獨給mapper下目錄配置DEBUG模式,代碼如下,這樣配置sql語句會打印,其他還是正常DEBUG級別:--><!--開發環境:打印控制臺--><springProfile name="dev"><!--可以輸出項目中的,mybatis的sql debug日志 別的debug日志不打印, additivity="false" 不傳播到根logger --><logger name="com.xxx.aaa.mapper" level="DEBUG" ><appender-ref ref="MYBATIS_DEBUG_FILE"/></logger><logger name="com.xxx.aaa.service" level="DEBUG" ><appender-ref ref="MYBATIS_DEBUG_FILE"/></logger><logger name="com.baomidou.mybatisplus" level="DEBUG" ><appender-ref ref="MYBATIS_DEBUG_FILE"/></logger><!--root節點是必選節點,用來指定最基礎的日志輸出級別,只有一個level屬性level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默認是DEBUG可以包含零個或多個appender元素。--><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="INFO_FILE" /><appender-ref ref="WARN_FILE" /><appender-ref ref="ERROR_FILE" />
<!-- <appender-ref ref="SendErrorMsgAppender"/>--></root></springProfile><!--生產環境:輸出到文件--><springProfile name="prd">
<!-- 寫這 只有 com.xxx包下的日志 會發送到飛書 -->
<!-- <logger name="com.xxx" level="INFO" >-->
<!-- <appender-ref ref="SendErrorMsgAppender"/>-->
<!-- </logger>--><logger name="com.xxx.aaa.mapper" level="DEBUG" additivity="false" ><appender-ref ref="MYBATIS_DEBUG_FILE"/></logger><logger name="com.xxx.aaa.service" level="DEBUG" additivity="false"><appender-ref ref="MYBATIS_DEBUG_FILE"/></logger><logger name="com.baomidou.mybatisplus" level="DEBUG" additivity="false" ><appender-ref ref="MYBATIS_DEBUG_FILE"/></logger><!-- 寫這 所有的ERROR錯誤日志都會發送到飛書 --><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="INFO_FILE" /><appender-ref ref="ERROR_FILE" /><appender-ref ref="WARN_FILE" /><appender-ref ref="SendErrorMsgAppender"/></root></springProfile></configuration>
最終效果:
注意點: 當天的不會建立文件夾 隔天會把昨天的放進文件夾里面
封面圖片,請忽略