摘要:概述應(yīng)用中,日志一般分為以下個級別錯誤信息警告信息一般信息調(diào)試信息跟蹤信息使用的作為內(nèi)部的日志框架,其僅僅是一個日志接口,在實際應(yīng)用中需要為該接口來指定相應(yīng)的日志實現(xiàn)。默認的日志實現(xiàn)是,是自帶的日志包,此外當(dāng)然也支持這類很流行的日志實現(xiàn)。
概述
Java應(yīng)用中,日志一般分為以下5個級別:
ERROR 錯誤信息
WARN 警告信息
INFO 一般信息
DEBUG 調(diào)試信息
TRACE 跟蹤信息
Spring Boot使用Apache的Commons Logging作為內(nèi)部的日志框架,其僅僅是一個日志接口,在實際應(yīng)用中需要為該接口來指定相應(yīng)的日志實現(xiàn)。
SpringBt默認的日志實現(xiàn)是Java Util Logging,是JDK自帶的日志包,此外SpringBt當(dāng)然也支持Log4J、Logback這類很流行的日志實現(xiàn)。
統(tǒng)一將上面這些日志實現(xiàn)統(tǒng)稱為日志框架
下面我們來實踐一下!
注: 本文首發(fā)于 My 公眾號 CodeSheep ,可 長按 或 掃描 下面的 小心心 來訂閱 ↓ ↓ ↓使用Spring Boot Logging插件
首先application.properties文件中加配置:
logging.level.root=INFO
控制器部分代碼如下:
package com.hansonwang99.controller; import com.hansonwang99.K8sresctrlApplication; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/testlogging") public class LoggingTestController { private static Logger logger = LoggerFactory.getLogger(K8sresctrlApplication.class); @GetMapping("/hello") public String hello() { logger.info("test logging..."); return "hello"; } }
運行結(jié)果
由于將日志等級設(shè)置為INFO,因此包含INFO及以上級別的日志信息都會打印出來
這里可以看出,很多大部分的INFO日志均來自于SpringBt框架本身,如果我們想屏蔽它們,可以將日志級別統(tǒng)一先全部設(shè)置為ERROR,這樣框架自身的INFO信息不會被打印。然后再將應(yīng)用中特定的包設(shè)置為DEBUG級別的日志,這樣就可以只看到所關(guān)心的包中的DEBUG及以上級別的日志了。
控制特定包的日志級別
application.yml中改配置
logging: level: root: error com.hansonwang99.controller: debug
很明顯,將root日志級別設(shè)置為ERROR,然后再將com.hansonwang99.controller包的日志級別設(shè)為DEBUG,此即:即先禁止所有再允許個別的 設(shè)置方法
控制器代碼
package com.hansonwang99.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/testlogging") public class LoggingTestController { private Logger logger = LoggerFactory.getLogger(this.getClass()); @GetMapping("/hello") public String hello() { logger.info("test logging..."); return "hello"; } }
運行結(jié)果
可見框架自身的INFO級別日志全部藏匿,而指定包中的日志按級別順利地打印出來
將日志輸出到某個文件中
logging: level: root: error com.hansonwang99.controller: debug file: ${user.home}/logs/hello.log
運行結(jié)果
使用Spring Boot Logging,我們發(fā)現(xiàn)雖然日志已輸出到文件中,但控制臺中依然會打印一份,發(fā)現(xiàn)用org.slf4j.Logger是無法解決這個問題的
集成Log4J日志框架pom.xml中添加依賴
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-log4j2
在resources目錄下添加log4j2.xml文件,內(nèi)容如下:
其他代碼都保持不變
運行程序發(fā)現(xiàn)控制臺沒有日志輸出,而hello2.log文件中有內(nèi)容,這符合我們的預(yù)期:
而且日志格式和pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n"格式中定義的相匹配
Log4J更進一步實踐pom.xml配置:
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-log4j2
log4j2.xml配置
springboot-web logs/${app_name}
控制器代碼:
package com.hansonwang99.controller; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/testlogging") public class LoggingTestController { private final Logger logger = LogManager.getLogger(this.getClass()); @GetMapping("/hello") public String hello() { for(int i=0;i<10_0000;i++){ logger.info("info execute index method"); logger.warn("warn execute index method"); logger.error("error execute index method"); } return "My First SpringBoot Application"; } }
運行結(jié)果
日志會根據(jù)不同的級別存儲在不同的文件,當(dāng)日志文件大小超過2M以后會分多個文件壓縮存儲,生產(chǎn)環(huán)境的日志文件大小建議調(diào)整為20-50MB。
后記作者更多的原創(chuàng)文章在此,歡迎觀賞
My Personal Blog
作者更多的SpringBt實踐文章在此:
Spring Boot應(yīng)用監(jiān)控實戰(zhàn)
SpringBoot應(yīng)用部署于外置Tomcat容器
ElasticSearch搜索引擎在SpringBt中的實踐
初探Kotlin+SpringBoot聯(lián)合編程
Spring Boot日志框架實踐
SpringBoot優(yōu)雅編碼之:Lombok加持
如果有興趣,也可以抽點時間看看作者一些關(guān)于容器化、微服務(wù)化方面的文章:
利用K8S技術(shù)棧打造個人私有云 連載文章
從一份配置清單詳解Nginx服務(wù)器配置
Docker容器可視化監(jiān)控中心搭建
利用ELK搭建Docker容器化應(yīng)用日志中心
RPC框架實踐之:Apache Thrift
RPC框架實踐之:Google gRPC
微服務(wù)調(diào)用鏈追蹤中心搭建
Docker容器跨主機通信
Docker Swarm集群初探
高效編寫Dockerfile的幾條準(zhǔn)則
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71051.html
摘要:作為微服務(wù)的基礎(chǔ)設(shè)施之一,背靠強大的生態(tài)社區(qū),支撐技術(shù)體系。微服務(wù)實踐為系列講座,專題直播節(jié),時長高達小時,包括目前最流行技術(shù),深入源碼分析,授人以漁的方式,幫助初學(xué)者深入淺出地掌握,為高階從業(yè)人員拋磚引玉。 簡介 目前業(yè)界最流行的微服務(wù)架構(gòu)正在或者已被各種規(guī)模的互聯(lián)網(wǎng)公司廣泛接受和認可,業(yè)已成為互聯(lián)網(wǎng)開發(fā)人員必備技術(shù)。無論是互聯(lián)網(wǎng)、云計算還是大數(shù)據(jù),Java平臺已成為全棧的生態(tài)體系,...
摘要:概述在我之前的應(yīng)用監(jiān)控實戰(zhàn)一文中,講述了如何利用版本來可視化地監(jiān)控應(yīng)用。接下來我們就來創(chuàng)建一個待監(jiān)控的示例。 showImg(https://segmentfault.com/img/remote/1460000015671446); 概述 在我之前的 《Spring Boot應(yīng)用監(jiān)控實戰(zhàn)》 一文中,講述了如何利用 Spring Boot Admin 1.5.X 版本來可視化地監(jiān)控 ...
摘要:概述之前講過容器的可視化監(jiān)控,即監(jiān)控容器的運行情況,包括使用率內(nèi)存占用網(wǎng)絡(luò)狀況以及磁盤空間等等一系列信息。實戰(zhàn)一下中添加依賴啟動應(yīng)用程序之后,只要在瀏覽器中輸入端點信息就能獲得應(yīng)用的一些狀態(tài)信息。 showImg(https://segmentfault.com/img/remote/1460000014684947); 概述 之前講過Docker容器的可視化監(jiān)控,即監(jiān)控容器的運行情...
摘要:來源是最流行的用于開發(fā)微服務(wù)的框架。以下依次列出了最佳實踐,排名不分先后。這非常有助于避免可怕的地獄。推薦使用構(gòu)造函數(shù)注入這一條實踐來自的項目負責(zé)人。保持業(yè)務(wù)邏輯免受代碼侵入的一種方法是使用構(gòu)造函數(shù)注入。 showImg(https://mmbiz.qpic.cn/mmbiz_jpg/R3InYSAIZkHQ40ly9Oztiart2lESCyjCH0JwFRp3oErlYobhibM...
閱讀 2159·2023-04-26 00:38
閱讀 1943·2021-09-07 10:17
閱讀 896·2021-09-02 15:41
閱讀 646·2021-08-30 09:45
閱讀 551·2019-08-29 17:25
閱讀 3220·2019-08-29 15:07
閱讀 2199·2019-08-29 12:52
閱讀 3742·2019-08-26 13:35