SpringBoot快速集成Logback日志組件
前言
在前一節(jié)的分享中,慕歌向大家介紹了如何使用spring boot 實(shí)現(xiàn)簡(jiǎn)單的郵寄發(fā)送服務(wù),用于驗(yàn)證碼服務(wù)或者是通知服務(wù)。如果大家有興趣,慕歌還想向大家進(jìn)一步分享,如何在使用第三方服務(wù),實(shí)現(xiàn)手機(jī)短信通知服務(wù),就是那個(gè)我們每天都會(huì)使用到的短信驗(yàn)證碼,通知服務(wù)。這一節(jié)慕歌想帶來spring boot日志系統(tǒng)的分享,以及慕歌自己的實(shí)現(xiàn)的簡(jiǎn)易日志記錄,慕歌會(huì)將日志同時(shí)保存在文件和數(shù)據(jù)庫之中。
引入:
如果我們使用 logback 就無需額外引入依賴,在spring boot statrt 中已經(jīng)默認(rèn)集成了logback 日志。
<!-- logback--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
如果想要使用log4j2 日志需要排除默認(rèn)日志,再引入,無需指定版本。
<!-- log4j2--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency>--> <groupId>org.springframework.boot</groupId>--> <artifactId>spring-boot-starter-log4j2</artifactId>--> </dependency>-->
配置:
引入日志依賴后,我們還需要指定日志的輸出格式,需要再resource中新建一個(gè)文件 logback.xml 。如果對(duì)于日志無特殊要求可直接參考我的日志配置。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 日志存放路徑 --> <property name="log.path" value="/www/wwwroo/logs/"/> <!-- 日志輸出格式 --> <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/> <!-- 控制臺(tái)輸出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!-- 系統(tǒng)日志輸出 --> <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/sys-info.log</file> <!-- 循環(huán)政策:基于時(shí)間創(chuàng)建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的歷史 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 過濾的級(jí)別 --> <level>INFO</level> <!-- 匹配時(shí)的操作:接收(記錄) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配時(shí)的操作:拒絕(不記錄) --> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/sys-error.log</file> <!-- 循環(huán)政策:基于時(shí)間創(chuàng)建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的歷史 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 過濾的級(jí)別 --> <level>ERROR</level> <!-- 匹配時(shí)的操作:接收(記錄) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配時(shí)的操作:拒絕(不記錄) --> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 用戶訪問日志輸出 --> <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/sys-user.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 按天回滾 daily --> <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的歷史 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!-- 系統(tǒng)模塊日志級(jí)別控制 --> <logger name="com.ewem" level="info"/> <!-- Spring日志級(jí)別控制 --> <logger name="org.springframework" level="warn"/> <root level="info"> <appender-ref ref="console"/> </root> <!--系統(tǒng)操作日志--> <root level="info"> <appender-ref ref="file_info"/> <appender-ref ref="file_error"/> </root> <!--系統(tǒng)用戶操作日志--> <logger name="sys-user" level="info"> <appender-ref ref="sys-user"/> </logger> </configuration>
這里的日志文件目錄由于是使用的linux ,配置格式就是從根目錄開始,需要換成你自己的日志輸出目錄。然后在配置中指定掃描路徑,使用我們D定義的日志格式:
# 日志配置 logging: # 日志等級(jí) level: # 更換成你的目錄 channel.cert: info org.springframework: warn # 日志路徑 config: classpath:logback.xml
完成以下日志配置后,即可在我們開發(fā)的時(shí)候隨時(shí)打一個(gè)日志,用于錯(cuò)誤排查。
開發(fā):
那么在真實(shí)的開發(fā)中,我們?nèi)绾卧谝欢未a中引入日志呢。我們不妨可以將日志先看作最初學(xué)習(xí)的輸出語句??梢栽谌绾蔚胤捷敵鲆粭l信息。日志與標(biāo)準(zhǔn)輸出的不同在于,日志具有等級(jí):
- 【TRACE】:trace是一種很低的日志級(jí)別,一般不會(huì)使用。目前,我只有在SpringBoot的啟動(dòng)之中,略微發(fā)現(xiàn)一些它的影子,表示的就是默認(rèn)不打印的日志。
- 【DEBUG】:debug是一種調(diào)試程序的日志級(jí)別,一般用于程序開發(fā)過程中打印一些調(diào)試日志、運(yùn)行信息,可以比較隨意的使用。
- 【INFO】:info是用來輸出程序的一些關(guān)鍵信息,強(qiáng)調(diào)業(yè)務(wù)邏輯的運(yùn)行過程信息,不能隨便打印。
- 【W(wǎng)ARN】:warn是用于輸出一些警告提示信息,一般是系統(tǒng)進(jìn)入到一種可恢復(fù)的狀態(tài)時(shí)打印的信息,警告但不是嚴(yán)重錯(cuò)誤。
- 【ERROR】:error是系統(tǒng)已經(jīng)發(fā)生錯(cuò)誤的事件,比如發(fā)生了異常,但是不想影響系統(tǒng)的正常運(yùn)行。可以打印一些錯(cuò)誤信息,提示開發(fā)者關(guān)注或者定位問題。
日志是打印在日志文件之中的,如果大量的打印會(huì)造成日志文件的驟增導(dǎo)致磁盤空間快速增長(zhǎng)。但是,排查問題的時(shí)候,我們都盡可能希望日志級(jí)別可以足夠的細(xì)致。沒有問題的時(shí)候,我們希望日志文件可以盡量減少磁盤的占用。所以,如果我們可以做到動(dòng)態(tài)地去控制日志級(jí)別,實(shí)現(xiàn)動(dòng)態(tài)打印日志,那就可以完美解決上訴的需求。
/** * 管理員 */ @Slf4j @RestController @RequestMapping("/admin") public class AdminUserController { @Autowired AdminUserService adminUserService; @Autowired AdminLogService adminLogService; //用戶詳情 @SaCheckLogin @RequestMapping("/searchOne") public R searchOne(@RequestBody AdminUser adminUser){ AdminUser user = adminUserService.getById(adminUser.getId()); log.trace("info"+user); log.info("info"+user); log.debug("info"+user); log.info("info"+user); log.warn("info"+user); return R.success(user); } }
在使用日志的時(shí)候不直接指定由logback 進(jìn)行日志記錄,而使用slf4j 上層接口,進(jìn)行日志的寫入。這樣即使,我們更換了日志系統(tǒng),并不會(huì)導(dǎo)致代碼中使用了舊日志系統(tǒng)的日志點(diǎn)報(bào)錯(cuò)。
結(jié)語
到此這篇關(guān)于SpringBoot快速集成Logback日志組件的文章就介紹到這了,更多相關(guān)SpringBoot集成Logback日志組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)中七種排序算法實(shí)現(xiàn)詳解
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)中七種排序算法的實(shí)現(xiàn)方法,排序算法可分為兩大類,比較類排序和非比較類排序,顧名思義可知它們是通過比較來決定元素間的相對(duì)次序,需要詳細(xì)了解排序算法的朋友可以參考下2024-02-02mybatis逆向工程與分頁在springboot中的應(yīng)用及遇到坑
最近在項(xiàng)目中應(yīng)用到springboot與mybatis,在進(jìn)行整合過程中遇到一些坑,在此將其整理出來,分享到腳本之家平臺(tái)供大家參考下2018-09-09Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的踩坑記錄
在某些情況下,需要在執(zhí)行新增后,需要獲取到新增行的id,這篇文章主要給大家介紹了關(guān)于Mybatis?Plus插入數(shù)據(jù)后獲取新數(shù)據(jù)id值的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08Spring條件注解@ConditionnalOnClass的原理分析
這篇文章主要介紹了Spring條件注解@ConditionnalOnClass的原理分析,所謂@ConditionalOnClass注解,翻譯過來就是基于class的條件,它為所標(biāo)注的類或方法添加限制條件,當(dāng)該條件的值為true時(shí),其所標(biāo)注的類或方法才能生效,需要的朋友可以參考下2023-12-12以Java代碼的方式總結(jié)幾個(gè)典型的內(nèi)存溢出案例
作為程序員,多多少少都會(huì)遇到一些內(nèi)存溢出的場(chǎng)景,如果你還沒遇到,說明你工作的年限可能比較短,或者你根本就是個(gè)假程序員!哈哈,開個(gè)玩笑.今天分享給大家Java內(nèi)存溢出的相關(guān)案例,希望大家在日常工作中,盡量避免寫這些low水平的代碼,需要的朋友可以參考下2021-06-06Springboot發(fā)送post請(qǐng)求的幾種方式總結(jié)
這篇文章主要為大家詳細(xì)介紹了Springboot發(fā)送post請(qǐng)求的幾種方式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以了解一下2024-01-01IDEA 的基本介紹使用及斷點(diǎn)調(diào)試技巧
IDEA 是 JetBrains 公司的產(chǎn)品,總部位于捷克的首都布拉格,IDEA在業(yè)界被公認(rèn)為最好的 Java 開發(fā)工具,今天通過本文給大家介紹IDEA 的基本介紹使用及斷點(diǎn)調(diào)試技巧,感興趣的朋友跟隨小編一起看看吧2021-11-11