SpringBoot+logback默認(rèn)日志的配置和使用方式
SpringBoot+logback默認(rèn)日志的配置和使用
記錄一下SpringBoot2.0.x使用默認(rèn)logback日志的配置和常見使用
SpringBoot的默認(rèn)日志是logback,在SpringBoot2.0.x版本中使用logback很方便而且內(nèi)存開銷小,速度快,還不需要去單獨的配置maven的jar包,因為已經(jīng)集成整合了的。
作為專門寫代碼來應(yīng)用的,不需要知道logback到底怎么實現(xiàn)的,什么底層,什么抽象層,反正用SpringBoot默認(rèn)的就對了,有特殊要求使用其他的 ,查找博客就能解決導(dǎo)包這些問題。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
從這里點進去
<!--web模塊的啟動器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
可以看到這個starter 繼續(xù)點進去查看
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.0.5.RELEASE</version> <scope>compile</scope> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> <version>2.0.5.RELEASE</version> <scope>compile</scope> </dependency>
配置文件的位置
在項目的/src/main/resources目錄下,新建logback的默認(rèn)日志配置文件logback-spring.xml(配置默認(rèn)就能生效)
注意:當(dāng)然也可以直接logback.xml直接測試也是能生效的
如果說我不喜歡他的默認(rèn)文件名 我非要自定義呢?
自定義配置文件名 myw-logback-test.xml
單獨加一個配置在application.properties
#配置文件 logging.config=classpath:myw-logback-test.xml
配置文件內(nèi)容
logback的配置文件內(nèi)容 這個還真的逐字逐句的了解其真意,這對使用來說特別有用的,最常用的文件類型格式如下
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!--不設(shè)置的話默認(rèn)名稱是default,contextName標(biāo)簽?zāi)茉O(shè)置成其他名稱,用于區(qū)分不同程序應(yīng)用--> <contextName>spring-boot-logging-myw</contextName> <!--配置日志文件的輸出路徑--> <property name="log.path" value="myw-log/" /> <!--輸出到控制臺或者文件--> <appender name="xxxxxx" class="ch.qos.logback.core.xxxxxxxxx"> <!--內(nèi)容--> </appender> <!-- 用來設(shè)置某一個包或者具體的某一個類的日志打印 --> <logger level="xxxx" name="xxxxx"> <!--內(nèi)容--> </logger> <!--指定基礎(chǔ)控制臺的日志輸出級別,level屬性指定級別 必須配置的--> <root level="xxx"> <!--內(nèi)容--> </root> </configuration>
configuration標(biāo)簽
- scan=“true” scan屬性默認(rèn)就是true 意思是說配置文件發(fā)生改變后,將會重新加載,默認(rèn)值為true 實際使用默認(rèn)就可以。
- scanPeriod=“60 seconds” 這個是設(shè)置檢測配置文件是否修改的時間間隔,時間單位默認(rèn)是毫秒,默認(rèn)1分鐘,但是給了秒的單位后就是秒,一般大家都是是60 seconds這樣配置。
- debug=“false” 這個屬性默認(rèn)是false 如果需要查看logback內(nèi)部日志,可以設(shè)置為true時,這樣可以實時查看logback運行狀態(tài)數(shù)據(jù),實際上沒用過也沒測試過 不關(guān)心這個點兒。
contextName標(biāo)簽
這個標(biāo)簽?zāi)J(rèn)名字是default 如果需要可以改成其他名字,一般沒用
<!--不設(shè)置的話默認(rèn)名稱是default,contextName標(biāo)簽?zāi)茉O(shè)置成其他名稱,用于區(qū)分不同程序應(yīng)用--> <contextName>spring-boot-logging-myw</contextName>
在idea的控制臺會顯示設(shè)置的名稱
但是在log日志文件里沒有這個屬性值
property標(biāo)簽
用法是在當(dāng)前根目錄下創(chuàng)建日志文件夾
<!-- 當(dāng)前根目錄下創(chuàng)建路徑 --> <property name="log.path" value="myw-log/" />
也可以使用絕對路徑 在linux中用絕對路徑反而更美,一般放在linux的data目錄下面,這樣不管是直接啟動還是使用腳本啟動還是服務(wù)方式開機啟動 都在data下面 當(dāng)然也可以用相對路徑 但是在加了開機啟動service方式可能日志路徑在/根目錄下面。
<property name="log.path" value="/data/myw-log/" />
在項目中運行的話這個日志文件在
appender標(biāo)簽
<!--輸出到文件--> <appender name="file_info" 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> <!-- 此處設(shè)置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-info-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志記錄之外,還配置了日志文件不能超過50M,若超過50M,日志文件會以索引0開始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天數(shù)--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
appender標(biāo)簽的name和class name可以根據(jù)需要定義 class就給ch.qos.logback.core.rolling.RollingFileAppender搞定,滾動記錄文件,目的是當(dāng)符合某個條件時,將日志記錄到特殊的日志文件,其他方式也有,具體調(diào)整具體配置,寫入文件用這個就夠了,無需多學(xué)。
file標(biāo)簽用來定義文件名字,encoder標(biāo)簽用來定義日志記錄格式和編碼的,沒啥好說的。
rollingPolicy標(biāo)簽,用來移動和重命名日志文件的,使用class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"就可以了,里面的標(biāo)簽有配置日志保存天數(shù) 日志文件大小等,也都直接用,要對日志的配置研究深入再說吧。
filter標(biāo)簽,class屬性有臨界值過濾和級別過濾
class=“ch.qos.logback.classic.filter.LevelFilter”
根據(jù)日志級別進行過濾,如果日志級別等于配置級別,過濾器會根據(jù)onMath(用于配置符合過濾條件的操作) 和 onMismatch(用于配置不符合過濾條件的操作)接收或拒絕日志,一般用這種。
<!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter>
class=“ch.qos.logback.classic.filter.ThresholdFilter”
過濾掉低于指定臨界值的日志,當(dāng)日志級別等于或高于臨界值時,過濾器返回NEUTRAL;當(dāng)日志級別低于臨界值時,日志會被拒絕。
<!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter>
- DENY:日志將立即被拋棄不再經(jīng)過其他過濾器。
- NEUTRAL:有序列表里的下個過濾器過接著處理日志。
- ACCEPT:日志會被立即處理,不再經(jīng)過剩余過濾器。
日志級別
日志級別從低到高分為 TRACE < DEBUG < INFO < WARN < ERROR < FATAL
TRACE 和 FATAL 忽略 那么只關(guān)心日志級別 DEBUG < INFO < WARN < ERROR
那么我需要把debug info warn error分開寫入不同的文件的配置
<!--輸出到文件--> <appender name="file_debug" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在記錄的日志文件的路徑及文件名 --> <file>${log.path}/log_debug.log</file> <!--日志輸出格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-debug-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志記錄之外,還配置了日志文件不能超過50M,若超過50M,日志文件會以索引0開始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天數(shù)--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到文件--> <appender name="file_error" 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> <!-- 此處設(shè)置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-error-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志記錄之外,還配置了日志文件不能超過50M,若超過50M,日志文件會以索引0開始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天數(shù)--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到文件--> <appender name="file_info" 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> <!-- 此處設(shè)置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-info-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志記錄之外,還配置了日志文件不能超過50M,若超過50M,日志文件會以索引0開始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天數(shù)--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到文件--> <appender name="file_warn" 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> <!-- 此處設(shè)置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-warn-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志記錄之外,還配置了日志文件不能超過50M,若超過50M,日志文件會以索引0開始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天數(shù)--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
我們在開發(fā)的時候 控制臺也是需要打印日志的,因此需要配置
<!--輸出到控制臺--> <appender name="console_debug" class="ch.qos.logback.core.ConsoleAppender"> <!--日志輸出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到控制臺--> <appender name="console_info" class="ch.qos.logback.core.ConsoleAppender"> <!--日志輸出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到控制臺--> <appender name="console_warn" class="ch.qos.logback.core.ConsoleAppender"> <!--日志輸出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到控制臺--> <appender name="console_error" class="ch.qos.logback.core.ConsoleAppender"> <!--日志輸出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
root標(biāo)簽
用來指定控制臺的輸出級別和記錄日志的級別,一般使用info級別
<root level="debug"> <appender-ref ref="file_debug" /> <appender-ref ref="file_info" /> <appender-ref ref="file_warn" /> <appender-ref ref="file_error" /> <appender-ref ref="console_debug" /> <appender-ref ref="console_info" /> <appender-ref ref="console_warn" /> <appender-ref ref="console_error" /> </root>
寫一個控制層LogBackController
package boot.example.logback.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping(value="/logback") public class LogBackController { private final Logger log = LoggerFactory.getLogger(this.getClass()); @RequestMapping(value="/hello") public String hello() { System.out.println("System.out.println 打印"); log.info("log info 日志"); log.error("log error 日志"); log.warn("log warn 日志"); log.debug("log debug 日志"); return "hello world"; } }
root標(biāo)簽的level屬性設(shè)置debug
啟動的時候控制臺會顯示很多信息,然后訪問接口可以看到四種級別的日志都有,甚至還有調(diào)試日志
在查看file文件的日志
root標(biāo)簽的level屬性設(shè)置info
設(shè)置info后可以看到debug日志沒有了,相對來說好的多了 info也是推薦的設(shè)置,因為他能顯示info warn和error的日志數(shù)據(jù)
控制臺 -已經(jīng)沒有了debug的數(shù)據(jù)
文件的日志
root標(biāo)簽的level屬性設(shè)置warn
控制臺 只有error和warn 至于上面的debug是main的 無需關(guān)心
文件日志
至于error 不測試了
完整的logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!--不設(shè)置的話默認(rèn)名稱是default,contextName標(biāo)簽?zāi)茉O(shè)置成其他名稱,用于區(qū)分不同程序應(yīng)用--> <contextName>spring-boot-logging-myw</contextName> <!-- 當(dāng)前根目錄下創(chuàng)建路徑 --> <property name="log.path" value="myw-log/" /> <!--輸出到控制臺--> <appender name="console_debug" class="ch.qos.logback.core.ConsoleAppender"> <!--日志輸出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到控制臺--> <appender name="console_info" class="ch.qos.logback.core.ConsoleAppender"> <!--日志輸出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到控制臺--> <appender name="console_warn" class="ch.qos.logback.core.ConsoleAppender"> <!--日志輸出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到控制臺--> <appender name="console_error" class="ch.qos.logback.core.ConsoleAppender"> <!--日志輸出格式 --> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到文件--> <appender name="file_debug" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在記錄的日志文件的路徑及文件名 --> <file>${log.path}/log_debug.log</file> <!--日志輸出格式 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-debug-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志記錄之外,還配置了日志文件不能超過50M,若超過50M,日志文件會以索引0開始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天數(shù)--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到文件--> <appender name="file_info" 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> <!-- 此處設(shè)置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-info-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志記錄之外,還配置了日志文件不能超過50M,若超過50M,日志文件會以索引0開始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天數(shù)--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到文件--> <appender name="file_warn" 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> <!-- 此處設(shè)置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-warn-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志記錄之外,還配置了日志文件不能超過50M,若超過50M,日志文件會以索引0開始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天數(shù)--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到文件--> <appender name="file_error" 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> <!-- 此處設(shè)置字符集 --> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys_log-error-%d{yyyy-MM-dd}-%i.log</fileNamePattern> <!-- 除按日志記錄之外,還配置了日志文件不能超過50M,若超過50M,日志文件會以索引0開始, 命名日志文件,例如xxx-2023-07-16.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日志保存周期 天數(shù)--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <root level="info"> <appender-ref ref="file_debug" /> <appender-ref ref="file_info" /> <appender-ref ref="file_warn" /> <appender-ref ref="file_error" /> <appender-ref ref="console_debug" /> <appender-ref ref="console_info" /> <appender-ref ref="console_warn" /> <appender-ref ref="console_error" /> </root> </configuration>
在java中最簡單的使用
private final Logger log = LoggerFactory.getLogger(this.getClass());
在靜態(tài)類里面
package boot.example.logback.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class StaticUtils { public static final Logger log = LoggerFactory.getLogger(StaticUtils.class); public static void testLog(){ log.info("log info"); } }
還可以借助lombok
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency>
package boot.example.logback.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController @RequestMapping(value="/logback") public class LogBackController2 { @RequestMapping(value="/hello2") public String hello() { System.out.println("System.out.println2 打印"); log.info("log info2 日志"); log.error("log error2 日志"); log.warn("log warn2 日志"); log.debug("log debug2 日志"); StaticUtils2.testLog(); return "hello world"; } }
package boot.example.logback.controller; import lombok.extern.slf4j.Slf4j; @Slf4j public class StaticUtils2 { public static void testLog(){ log.info("log info"); } }
至于logback里的其他標(biāo)簽 不是真正的剛需就不需要去花時間記錄了。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- SpringBoot整合日志功能(slf4j+logback)詳解(最新推薦)
- springboot項目配置logback-spring.xml實現(xiàn)按日期歸檔日志的方法
- Springboot Logback日志多文件輸出方式(按日期和大小分割)
- Springboot MDC+logback實現(xiàn)日志追蹤的方法
- SpringBoot集成logback打印彩色日志的代碼實現(xiàn)
- IDEA?設(shè)置?SpringBoot?logback?彩色日志的解決方法?附配置文件
- Springboot使用Logback實現(xiàn)日志配置與異常記錄
- springboot使用logback自定義日志的詳細(xì)過程
相關(guān)文章
java實現(xiàn)拉鉤網(wǎng)上的FizzBuzzWhizz問題示例
這篇文章主要介紹了java實現(xiàn)拉鉤網(wǎng)上的FizzBuzzWhizz問題示例,需要的朋友可以參考下2014-05-05Spring-Security對HTTP相應(yīng)頭的安全支持方式
這篇文章主要介紹了Spring-Security對HTTP相應(yīng)頭的安全支持方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10idea普通javaweb項目如何部署到tomcat(讀取web.xml文件)
這篇文章主要介紹了idea普通javaweb項目如何部署到tomcat(讀取web.xml文件),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08spring無法讀取properties文件數(shù)據(jù)問題詳解
這篇文章主要介紹了spring無法讀取properties文件數(shù)據(jù)問題詳解,需要的朋友可以參考下2020-02-02使用jekins自動構(gòu)建部署java maven項目的方法步驟
這篇文章主要介紹了使用jekins自動構(gòu)建部署java maven項目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01基于java web獲取網(wǎng)頁訪問次數(shù)代碼實例
這篇文章主要介紹了基于java web獲取網(wǎng)頁訪問次數(shù)代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02