精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

求你了,別亂打印日志了!

運維 數據庫運維
日志是快速定位問題的好幫手,是撕逼和甩鍋的利器!打印好日志非常重要。今天我們來聊聊日志打印的 15 個好建議。

 [[426732]]

圖片來自 包圖網

選擇恰當的日志級別

常見的日志級別有 5 種,分別是 error、warn、info、debug、trace:

  • error:錯誤日志,指比較嚴重的錯誤,對正常業務有影響,需要運維配置監控的。
  • warn:警告日志,一般的錯誤,對業務影響不大,但是需要開發關注。
  • info:信息日志,記錄排查問題的關鍵信息,如調用時間、出參入參等等。
  • debug:用于開發 DEBUG 的,關鍵邏輯里面的運行時數據。
  • trace:最詳細的信息,一般這些信息只記錄到日志文件中。

日常開發中,我們需要選擇恰當的日志級別,不要反手就是打印 info 哈。

日志要打印出方法的入參、出參

我們并不需要打印很多很多日志,只需要打印可以快速定位問題的有效日志。有效的日志,是甩鍋的利器!

[[426734]]

哪些算得上有效關鍵的日志呢?比如說,方法進來的時候,打印入參。再然后呢,在方法返回的時候,就是打印出參,返回值。入參的話,一般就是 userId 或者 bizSeq 這些關鍵信息。

正例如下:

  1. public String testLogMethod(Document doc, Mode mode){ 
  2.    log.debug(“method enter param:{}”,userId); 
  3.    String id = "666"
  4.    log.debug(“method exit param:{}”,id); 
  5.    return id; 

選擇合適的日志格式

理想的日志格式,應當包括這些最基本的信息:如當前時間戳(一般毫秒精確度)、日志級別,線程名字等等。

在 logback 日志里可以這么配置:

  1. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"
  2.     <encoder> 
  3.         <pattern>%d{HH:mm:ss.SSS} %-5level [%thread][%logger{0}] %m%n</pattern> 
  4.     </encoder> 
  5. </appender>  

如果我們的日志格式,連當前時間都沒有記錄,那連請求的時間點都不知道了?

[[426735]]

遇到 if...else... 等條件時,每個分支首行都盡量打印日志

當你碰到 if...else... 或者 switch 這樣的條件時,可以在分支的首行就打印日志,這樣排查問題時,就可以通過日志,確定進入了哪個分支,代碼邏輯更清晰,也更方便排查問題了。

[[426736]]

正例:

  1. if(user.isVip()){ 
  2.   log.info("該用戶是會員,Id:{},開始處理會員邏輯",user,getUserId()); 
  3.   //會員邏輯 
  4. }else
  5.   log.info("該用戶是非會員,Id:{},開始處理非會員邏輯",user,getUserId()) 
  6.   //非會員邏輯 

日志級別比較低時,進行日志開關判斷

對于 trace/debug 這些比較低的日志級別,必須進行日志級別的開關判斷。

正例:

  1. User user = new User(666L, "公眾號""撿田螺的小男孩"); 
  2. if (log.isDebugEnabled()) { 
  3.     log.debug("userId is: {}"user.getId()); 

因為當前有如下的日志代碼:

  1. logger.debug("Processing trade with id: " + id + " and symbol: " + symbol); 

如果配置的日志級別是 warn 的話,上述日志不會打印,但是會執行字符串拼接操作,如果 symbol 是對象,還會執行 toString() 方法,浪費了系統資源,執行了上述操作,最終日志卻沒有打印,因此建議加日志開關判斷。

不能直接使用日志系統中的 API

不能直接使用日志系統(Log4j、Logback)中的 API,而是使用日志框架 SLF4J 中的 API。

SLF4J 是門面模式的日志框架,有利于維護和各個類的日志處理方式統一,并且可以在保證不修改代碼的情況下,很方便的實現底層日志框架的更換。

[[426737]]

正例:

  1. import org.slf4j.Logger;  
  2. import org.slf4j.LoggerFactory; 
  3.  
  4. private static final Logger logger = LoggerFactory.getLogger(TianLuoBoy.class); 

建議使用參數占位 {},而不是用 + 拼接。

反例:

  1. logger.info("Processing trade with id: " + id + " and symbol: " + symbol); 

上面的例子中,使用+操作符進行字符串的拼接,有一定的性能損耗。

正例如下:

  1. logger.info("Processing trade with id: {} and symbol : {} ", id, symbol); 

我們使用了大括號{}來作為日志中的占位符,比于使用+操作符,更加優雅簡潔。并且,相對于反例,使用占位符僅是替換動作,可以有效提升性能。

建議使用異步的方式來輸出日志

日志最終會輸出到文件或者其它輸出流中的,IO 性能會有要求的。如果異步,就可以顯著提升 IO 性能。

除非有特殊要求,要不然建議使用異步的方式來輸出日志。以 logback 為例吧,要配置異步很簡單,使用 AsyncAppender 就行。

  1. <appender name="FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender"
  2.     <appender-ref ref="ASYNC"/> 
  3. </appender> 

不要使用 e.printStackTrace()

[[426738]]

反例:

  1. try{ 
  2.   // 業務代碼處理 
  3. }catch(Exception e){ 
  4.   e.printStackTrace(); 

正例:

  1. try{ 
  2.   // 業務代碼處理 
  3. }catch(Exception e){ 
  4.   log.error("你的程序有異常啦",e); 

理由:

  • e.printStackTrace() 打印出的堆棧日志跟業務代碼日志是交錯混合在一起的,通常排查異常日志不太方便。
  • e.printStackTrace() 語句產生的字符串記錄的是堆棧信息,如果信息太長太多,字符串常量池所在的內存塊沒有空間了,即內存滿了,那么,用戶的請求就卡住啦!

異常日志不要只打一半,要輸出全部錯誤信息

[[426739]]

反例 1:

  1. try { 
  2.     //業務代碼處理 
  3. } catch (Exception e) { 
  4.     // 錯誤 
  5.     LOG.error('你的程序有異常啦'); 
  6. }  

異常 e 都沒有打印出來,所以壓根不知道出了什么類型的異常。

反例 2:

  1. try { 
  2.     //業務代碼處理 
  3. } catch (Exception e) { 
  4.     // 錯誤 
  5.     LOG.error('你的程序有異常啦', e.getMessage()); 
  6. }  

e.getMessage() 不會記錄詳細的堆棧異常信息,只會記錄錯誤基本描述信息,不利于排查問題。

正例:

  1. try { 
  2.     //業務代碼處理 
  3. } catch (Exception e) { 
  4.     // 錯誤 
  5.     LOG.error('你的程序有異常啦', e); 
  6. }  

禁止在線上環境開啟 debug

禁止在線上環境開啟 debug,這一點非常重要。

因為一般系統的 debug 日志會很多,并且各種框架中也大量使用 debug 的日志,線上開啟 debug 不久可能會打滿磁盤,影響業務系統的正常運行。

不要記錄了異常,又拋出異常

[[426740]]

反例如下:

  1. log.error("IO exception", e); 
  2. throw new MyException(e); 

這樣實現的話,通常會把棧信息打印兩次。這是因為捕獲了 MyException 異常的地方,還會再打印一次。

這樣的日志記錄,或者包裝后再拋出去,不要同時使用!否則你的日志看起來會讓人很迷惑。

避免重復打印日志

避免重復打印日志,醬紫會浪費磁盤空間。如果你已經有一行日志清楚表達了意思,避免再冗余打印。

反例如下:

  1. if(user.isVip()){ 
  2.   log.info("該用戶是會員,Id:{}",user,getUserId()); 
  3.   //冗余,可以跟前面的日志合并一起 
  4.   log.info("開始處理會員邏輯,id:{}",user,getUserId()); 
  5.   //會員邏輯 
  6. }else
  7.   //非會員邏輯 

如果你是使用 log4j 日志框架,務必在 log4j.xml 中設置 additivity=false,因為可以避免重復打印日志。

正例:

  1. <logger name="com.taobao.dubbo.config" additivity="false">  

日志文件分離

我們可以把不同類型的日志分離出去,比如 access.log,或者 error 級別 error.log,都可以單獨打印到一個文件里面。

[[426741]]

當然,也可以根據不同的業務模塊,打印到不同的日志文件里,這樣我們排查問題和做數據統計的時候,都會比較方便啦。

核心功能模塊,建議打印較完整的日志

我們日常開發中,如果核心或者邏輯復雜的代碼,建議添加詳細的注釋,以及較詳細的日志。

[[426742]]

日志要多詳細呢?腦洞一下,如果你的核心程序哪一步出錯了,通過日志可以定位到,那就可以啦。

作者:撿田螺的小男孩

編輯:陶家龍

出處:轉載自公眾號撿田螺的小男孩

 

責任編輯:武曉燕 來源: 撿田螺的小男孩
相關推薦

2020-12-04 10:05:00

Pythonprint代碼

2020-12-02 11:18:50

print調試代碼Python

2019-06-27 17:18:02

Java日志編程語言

2022-08-28 16:54:02

開發日志Java

2020-10-10 06:25:36

日志原理搜索

2023-07-31 09:12:39

B+樹節點B+Tree

2020-06-15 08:12:51

try catch代碼處理器

2021-05-11 07:10:18

標準庫DjangoOS

2020-12-11 09:24:19

Elasticsear存儲數據

2024-06-12 13:54:37

編程語言字符串代碼

2020-12-15 08:06:45

waitnotifyCondition

2025-02-10 08:05:03

2019-01-21 09:19:05

5G

2020-12-01 11:18:34

對外接口枚舉

2020-04-16 08:22:11

HTTPS加解密協議

2021-02-05 06:41:52

運維生產日志重復打印

2021-05-20 08:30:47

運維日志打印

2015-11-16 10:29:00

2022-10-27 21:34:28

數據庫機器學習架構

2020-09-22 09:05:45

MySQLUTF-8utf8mb4
點贊
收藏

51CTO技術棧公眾號

日本精品黄色| 欧美电影免费观看| 成人精品一区二区三区中文字幕| 精品国产凹凸成av人网站| 欧美乱大交xxxxx潮喷l头像| 欧美欧美欧美| 狠狠色丁香久久婷婷综| 国产69精品久久久久99| 欧美三级视频网站| 99re66热这里只有精品4| 亚洲欧洲日韩在线| 亚洲va欧美va国产综合久久| 日本道在线观看| 黄色免费大全亚洲| 精品视频123区在线观看| 免费的一级黄色片| 成人精品一区二区三区免费| 福利一区在线观看| 国产精品视频一| 粉嫩aⅴ一区二区三区| 久久一区二区中文字幕| 精品视频一区在线视频| 黄色片免费网址| av免费在线免费| 国产成人av一区二区| 国产精品www| 日韩黄色一级大片| 欧美全黄视频| 久久久精品国产| www久久久久久久| 91国产一区| 一本到不卡免费一区二区| av在线免费观看国产| 日韩有码第一页| 久久黄色影院| 国产做受69高潮| 青青操国产视频| 日本不卡高清| 国产香蕉精品视频一区二区三区| 亚洲 激情 在线| 自拍偷拍亚洲视频| 中文字幕视频一区二区三区久| 91亚洲精品视频| 国产精品尤物视频| 久久精品盗摄| 久久躁狠狠躁夜夜爽| 日本一二三不卡视频| 精品在线观看入口| 亚洲精品国产拍免费91在线| 在线中文字日产幕| 欧洲大片精品免费永久看nba| 欧美日韩美女视频| 亚洲国产成人精品无码区99| av大全在线| 亚洲人妖av一区二区| 久久久久一区二区三区| 四虎永久在线精品免费网址| 国产精品综合一区二区三区| 欧美在线视频导航| 日日噜噜噜噜人人爽亚洲精品| 久久伦理在线| 中文字幕在线观看日韩| 三级黄色片在线观看| 91大神精品| 欧美mv和日韩mv的网站| 亚洲精品乱码久久久久久9色| 高潮一区二区| 色欧美日韩亚洲| 凹凸日日摸日日碰夜夜爽1| 国产伦精品一区二区三区视频金莲| 亚洲私人黄色宅男| 欧美做受777cos| 成人全视频高清免费观看| 日本一区二区免费在线观看视频| 国产另类自拍| 天堂91在线| 欧美激情在线一区二区三区| 亚洲一卡二卡三卡| 亚洲大胆人体大胆做受1| 亚洲午夜国产一区99re久久| 亚洲一区二区三区涩| 日韩精品黄色| 一区二区高清视频在线观看| 青青草成人免费在线视频| 三级中文字幕在线观看| 欧美午夜免费电影| 人妻少妇偷人精品久久久任期| 四虎4545www精品视频| 午夜精品久久久久久| 可以免费观看av毛片| 日韩黄色三级| 亚洲国产成人精品电影| 亚洲黄色小说视频| 欧美在线影院| 日韩av免费在线播放| 国产又粗又黄视频| 不卡av在线免费观看| 欧美一级片免费观看| 操你啦在线视频| 黑人精品xxx一区一二区| 国产精品无码免费专区午夜| 在线男人天堂| 欧美一区二区不卡视频| www.色多多| 亚洲电影影音先锋| 日韩av电影免费观看高清| 亚洲黄色一区二区| 另类综合日韩欧美亚洲| 国产乱码精品一区二区三区卡| 日本免费不卡视频| 中文字幕欧美国产| 一区中文字幕在线观看| 美女在线视频免费| 在线成人高清不卡| 天天躁日日躁aaaa视频| 伊人久久综合| 51ⅴ精品国产91久久久久久| av网站免费大全| 久久久久久夜精品精品免费| 国产精品自拍合集| 青青伊人久久| 亚洲人午夜精品免费| 国产一级二级三级视频| 琪琪一区二区三区| 成人免费直播live| 国模吧精品人体gogo| 中文字幕不卡在线| 国产中文字幕视频在线观看| 日本免费一区二区三区视频| 中文字幕日韩在线播放| 精品欧美一区二区三区免费观看 | 天堂v在线视频| 欧美黑人一区| 日韩国产在线播放| 国产午夜福利一区二区| 国产精品资源网站| 亚洲永久免费视频| 国产欧美一区二区视频| 成人免费观看视频大全| 欧美三级视频在线观看| 色欲AV无码精品一区二区久久| 不卡在线一区二区| 欧日韩不卡在线视频| 色综合免费视频| 亚洲网友自拍偷拍| 女人扒开腿免费视频app| 久久资源综合| 韩剧1988在线观看免费完整版 | 色婷婷久久久综合中文字幕| 久久人人爽人人人人片| 亚洲精品影院在线观看| 国产一区二区视频在线免费观看| av中文在线| 欧美在线视频不卡| 欧美xxxx精品| 精品午夜一区二区三区在线观看| 国产一区免费在线| 成人免费高清观看| 亚洲国内精品在线| 六月丁香婷婷综合| 久久久国际精品| 成人免费看片'免费看| 6080成人| 久久综合88中文色鬼| 精品国精品国产自在久不卡| 一区二区三区 在线观看视频| 精品日韩久久久| 色综合天天综合网中文字幕| 成人免费看吃奶视频网站| av免费在线免费观看| 亚洲大胆人体在线| 久久免费激情视频| 国产成a人亚洲精品| 久久亚洲精品无码va白人极品| 99久久99九九99九九九| 亚洲美女久久久| 伊人网视频在线| 一区二区三区自拍| 天天插天天射天天干| 欧美日韩亚洲一区三区| 精品中文字幕人| 91p九色成人| 欧美精品在线播放| 视频午夜在线| 美女一区2区| 亚洲成年人网站在线观看| 国产婷婷在线观看| 日韩精品乱码免费| 国产综合 伊人色| 青春草在线视频| 亚洲跨种族黑人xxx| 亚洲一二区视频| 亚洲一区二区三区中文字幕| 手机看片国产精品| 婷婷精品进入| 久久av免费一区| 91精品国产色综合久久不卡粉嫩| 少妇高潮 亚洲精品| 亚洲精品人妻无码| 欧美中文字幕一区二区三区亚洲| 久久国产精品影院| 国模少妇一区二区三区| 亚洲国产精品女人| 粉嫩一区二区三区在线观看| 亚洲91av视频| 黄在线免费观看| 亚洲精品一区二三区不卡| 11024精品一区二区三区日韩| 国产精品久久久久影院| 国产一线在线观看| 老司机免费视频一区二区三区| 欧美aaa在线观看| 一个色免费成人影院| 97免费高清电视剧观看| 日本少妇一区| 国内自拍欧美激情| 成人福利网站| 中文日韩电影网站| 深夜福利视频一区| 欧美午夜精品一区二区蜜桃| 国产午夜小视频| 亚洲日本在线观看| 成人黄色免费网址| 99这里只有精品| 久久久久久久久久久久国产精品| 日韩一区二区免费看| 400部精品国偷自产在线观看 | 人妻少妇精品无码专区久久| 无码av免费一区二区三区试看| 久久久久久久久久久国产精品| 欧美aaa在线| 精品国产成人av在线免| 国产色综合网| www.av毛片| av亚洲免费| 日本不卡在线播放| 九九热精品视频在线观看| 精品国产区在线| 国产精品玖玖玖在线资源| av资源一区二区| 日本少妇精品亚洲第一区| 91色p视频在线| 成人动漫视频在线观看| 91精品视频大全| 国产精品va视频| 日本国产一区二区三区| 黄色软件视频在线观看| 神马久久桃色视频| 91精彩在线视频| 色阁综合伊人av| 免费a级人成a大片在线观看| 久久精品这里热有精品| 老司机99精品99| 欧美夫妻性生活视频| 日本成人不卡| 国语自产精品视频在线看| 香蕉视频在线免费看| xxxxxxxxx欧美| 成人video亚洲精品| 欧美理论片在线观看| 国产理论电影在线| 97超碰国产精品女人人人爽| 蜜桃视频www网站在线观看| 欧美一区二区三区免费视| 日本精品不卡| 成人激情免费在线| 亚洲一区二区三区免费| 91精品国产自产在线| 国产精品视频一区视频二区| 高清免费日韩| 美女久久99| 自拍偷拍亚洲色图欧美| 亚洲午夜在线| 国产91在线免费| 蜜臀av国产精品久久久久| 美女被艹视频网站| 激情综合色丁香一区二区| 日本少妇一区二区三区| 国产中文一区二区三区| 精品人妻二区中文字幕| 26uuu久久天堂性欧美| 日韩aaaaa| 国产欧美日韩久久| 色一情一交一乱一区二区三区| 91丨国产丨九色丨pron| 午夜黄色福利视频| 一区二区三区国产豹纹内裤在线| 欧洲第一无人区观看| 亚洲成人在线免费| 中国一级特黄视频| 亚洲精品一线二线三线无人区| 国产aⅴ一区二区三区| 亚洲国产三级网| 日本韩国在线视频爽| 色偷偷av一区二区三区乱| 91社区在线高清| 欧美第一淫aaasss性| 78精品国产综合久久香蕉| 成人午夜电影在线播放| 欧美日韩性在线观看| 欧美中文字幕在线观看视频 | 亚洲品质视频自拍网| 黄网页免费在线观看| 欧美整片在线观看| 亚洲网址在线观看| 亚洲一卡二卡区| 欧美一级视频| 亚洲熟妇一区二区| 中文字幕中文在线不卡住| 国产精品suv一区二区三区| 在线不卡欧美精品一区二区三区| 99热这里精品| 国产香蕉精品视频一区二区三区| 成人精品福利| 日韩中文字幕视频| 亚洲十八**毛片| 成人高清在线观看| 99久久亚洲精品| 国产成人综合一区| 粉嫩绯色av一区二区在线观看| 中文字幕在线播放视频| 亚洲乱码一区二区三区在线观看| 美女视频黄免费| 欧美区视频在线观看| 免费黄色在线视频网站| 97欧美精品一区二区三区| 欧美成年网站| 丰满女人性猛交| 久久精品国产99国产| 特黄特色免费视频| 久久众筹精品私拍模特| 激情五月激情综合| 91成人网在线| 免费国产在线视频| 国产91九色视频| 亚州av一区| 免费在线观看毛片网站| 91小视频在线免费看| 特一级黄色大片| 亚洲第一区中文字幕| 韩国日本一区| 国产乱码精品一区二区三区日韩精品 | 亚洲日本欧美| 久久久久久久久久影视| 亚洲已满18点击进入久久| 欧美brazzers| 亚洲欧美精品在线| 欧美人动性xxxxz0oz| 99影视tv| 在线日本成人| 亚洲欧美色图视频| 一区二区欧美国产| 性一交一乱一伧老太| 高清亚洲成在人网站天堂| 麻豆精品少妇| 日韩 欧美 高清| 成人黄色a**站在线观看| 国产无精乱码一区二区三区| 欧美精品在线观看播放| 黄色网页在线看| 99久re热视频这里只有精品6| 久久国产影院| 九九热精品国产| 一区二区欧美视频| 天堂在线一二区| 国产精品欧美日韩| 亚洲视频电影在线| 日本人添下边视频免费| 一本色道综合亚洲| 午夜在线视频| caoporn国产精品免费公开| 日韩午夜免费视频| 日本乱子伦xxxx| 制服丝袜亚洲网站| 成人性生交大片免费看网站| 免费亚洲精品视频| 蜜臀av性久久久久蜜臀aⅴ四虎 | 中文字幕av不卡在线| 亚洲视频一二区| 日本高清视频免费看| 日本午夜人人精品| 私拍精品福利视频在线一区| 女人被男人躁得好爽免费视频| 狠狠色综合播放一区二区| 欧美精品成人久久| 亚洲美女自拍视频| **国产精品| 国产偷人视频免费| 国产亚洲精品aa午夜观看| 国产又粗又黄又爽视频| 国内外成人免费激情在线视频网站 | 18成人免费观看视频| 日韩一级av毛片| 欧美成人综合网站| 一二区成人影院电影网| 国产高清www| 国产精品美女久久久久久久久久久 | 免费看毛片的网站| 欧洲激情一区二区| 波多野结衣乳巨码无在线观看|