国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

小談日志與其實踐

lidashuang / 3031人閱讀

摘要:對于日志級別的分類,有以下參考表示需要立即被處理的系統級錯誤。注意日志的切片設置,以免文件過大不方便操作。過期的日志定期清理。

本文首發于泊浮目的專欄:https://segmentfault.com/blog...
前言

前陣子在論壇上看到一個問題,大致的意思就是日志該怎么打?或者說是,我們應該在日志中打印出哪些內容?

看了該問題,筆者真是有所感慨:從實習到現在,從接的外包小項目到企業級應用,從覺得日志沒什么軟用到在客戶的環境中排bug在日志中看到蛛絲馬跡。不得不說,日志真是太重要了。

什么是日志

日志文件是用于記錄系統操作事件的記錄文件或文件集合,是一個軟件系統的重要組成部分。一般良好的日志可以幫助我們:

了解項目的運行狀態

發現潛在的性能問題

快速定位故障所在

價值化(大數據分析等)

.....

日志的分類

就功能來說,我們一般分為診斷日志、審計日志、統計日志。

診斷日志

一般診斷日志包含的信息最為全面,包括但不限于:

Request && Response

系統操作行為:讀寫文件、定時任務等

異常行為:不可容錯與容錯行為

第三方服務的調用

審計日志

記錄賬戶對資源的操作行為。比起診斷日志,可能更加方便普通人的閱讀,運營、運維同志們的福利。

統計日志

用戶訪問統計:瀏覽、日活、IP、上傳下載的數據量

計費日志(常見于公有、私有云中)

日志中該記錄什么

先來看看一段ZStack中的日志

2017-09-04 13:37:45,509 TRACE [CloudBusImpl2] {} [msg send]: {"org.zstack.header.host.APIDeleteHostMsg":{"uuid":"e36525b2fbe9429093450b72a4552656","deleteMode":"Permissive","session":{"uuid":"a7c068a7d3fd41388994e4b413cf4f7d"},"timeout":-1,"headers":{"correlationId":"f1ad7d11a73f472ca5dc2ea003f16006","replyTo":"zstack.message.cloudbus.bbaaa63f1b4d4b0cb96e452bf68eaccf","noReply":"false","schema":{},"task-context":{}},"id":"f1ad7d11a73f472ca5dc2ea003f16006","serviceId":"api.portal","createdTime":1504417065507}}

我們可以看到精確的時間,以及日志級別,日志調用者及其行為,以及參數。其中correlationId就是我們常說的RequestID。

RequestID:我們通常用RequestID來對請求進行唯一的標記,目的是可以通過RequestID將一個請求在系統中的執行過程串聯起來,這在分布式系統中的威力是巨大的。該RequestID通常會隨著響應返回給調用者,如果調用出現問題,調用者也可以通過提供RequestID幫助服務提供者定位問題。以Java為例,生成方法可以考慮如下:
public static String getUuid() {
      return UUID.randomUUID().toString().replace("-", "");
}
ps:去掉-是為了更方便的copy-paste。

這樣我們便可以利用這個線索在日志中快速的找出問題啦。同時,我們也可以根據自己的需求來放入時間戳、業務屬性等來組成RequestID

除之前提到的該記錄的日志

Request && Response

系統操作行為:讀寫文件、定時任務等

異常行為:不可容錯與容錯行為(比如分布式系統中的心跳機制,請記錄嘗試的次數)

第三方服務的調用

還有:

很少出現的else情況

非預期執行

批量插入操作記錄

服務狀態變化(盡有可能記錄線索)

我們也要去掉那些多余的日志,比如:

明明可以一條輸出卻多條輸出(無論從閱讀還是性能上來看都不是較為好的選擇)

為調試而添加的臨時日志

預期會被正常處理的異常,卻打出堆棧

等...

關于日志級別

我們通常使用的日志庫,將日志基本分為以下幾類(從高到低):

FATAL – The FATAL level designates very severe error events that will presumably lead the application to abort.

ERROR – The ERROR level designates error events that might still allow the application to continue running.

WARN – The WARN level designates potentially harmful situations.

INFO – The INFO level designates informational messages that highlight the progress of the application at coarse-grained level.

DEBUG – The DEBUG Level designates fine-grained informational events that are most useful to debug an application.

TRACE – The TRACE Level designates finer-grained informational events than the

參考帖子:https://stackoverflow.com/que...。

對于日志級別的分類,有以下參考:

FATAL

表示需要立即被處理的系統級錯誤。當該錯誤發生時,表示服務已經出現了某種程度的不可用,系統管理員需要立即介入。這屬于最嚴重的日志級別,因此該日志級別必須慎用,如果這種級別的日志經常出現,則該日志也失去了意義。通常情況下,一個進程的生命周期中應該只記錄一次FATAL級別的日志,即該進程遇到無法恢復的錯誤而退出時。當然,如果某個系統的子系統遇到了不可恢復的錯誤,那該子系統的調用方也可以記入FATAL級別日志,以便通過日志報警提醒系統管理員修復;

ERROR

該級別的錯誤也需要馬上被處理,但是緊急程度要低于FATAL級別。當ERROR錯誤發生時,已經影響了用戶的正常訪問。從該意義上來說,實際上ERROR錯誤和FATAL錯誤對用戶的影響是相當的。FATAL相當于服務已經掛了,而ERROR相當于好死不如賴活著,然而活著卻無法提供正常的服務,只能不斷地打印ERROR日志。特別需要注意的是,ERROR和FATAL都屬于服務器自己的異常,是需要馬上得到人工介入并處理的。而對于用戶自己操作不當,如請求參數錯誤等等,是絕對不應該記為ERROR日志的;

WARN

該日志表示系統可能出現問題,也可能沒有,這種情況如網絡的波動等。對于那些目前還不是錯誤,然而不及時處理也會變為錯誤的情況,也可以記為WARN日志,例如一個存儲系統的磁盤使用量超過閥值,或者系統中某個用戶的存儲配額快用完等等。對于WARN級別的日志,雖然不需要系統管理員馬上處理,也是需要及時查看并處理的。因此此種級別的日志也不應太多,能不打WARN級別的日志,就盡量不要打;

INFO

該種日志記錄系統的正常運行狀態,例如某個子系統的初始化,某個請求的成功執行等等。通過查看INFO級別的日志,可以很快地對系統中出現的 WARN,ERROR,FATAL錯誤進行定位。INFO日志不宜過多,通常情況下,INFO級別的日志應該不大于TRACE日志的10%;

DEBUG or TRACE

這兩種日志具體的規范應該由項目組自己定義,該級別日志的主要作用是對系統每一步的運行狀態進行精確的記錄。通過該種日志,可以查看某一個操作每一步的執 行過程,可以準確定位是何種操作,何種參數,何種順序導致了某種錯誤的發生。可以保證在不重現錯誤的情況下,也可以通過DEBUG(或TRACE)級別的日志對問題進行診斷。需要注意的是,DEBUG日志也需要規范日志格式,應該保證除了記錄日志的開發人員自己外,其他的如運維,測試人員等也可以通過 DEBUG(或TRACE)日志來定位問題;

其他

注意制定規范,而不是讓開發者隨意打日志。對于日志的等級選擇也要注意。

注意日志的切片設置,以免文件過大不方便操作。

過期的日志定期清理。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70334.html

相關文章

  • 小談日志與其實踐

    摘要:對于日志級別的分類,有以下參考表示需要立即被處理的系統級錯誤。注意日志的切片設置,以免文件過大不方便操作。過期的日志定期清理。 本文首發于泊浮目的專欄:https://segmentfault.com/blog... 前言 前陣子在論壇上看到一個問題,大致的意思就是日志該怎么打?或者說是,我們應該在日志中打印出哪些內容? 看了該問題,筆者真是有所感慨:從實習到現在,從接的外包小項目到...

    pinecone 評論0 收藏0
  • 小談日志與其實踐

    摘要:對于日志級別的分類,有以下參考表示需要立即被處理的系統級錯誤。注意日志的切片設置,以免文件過大不方便操作。過期的日志定期清理。 本文首發于泊浮目的專欄:https://segmentfault.com/blog... 前言 前陣子在論壇上看到一個問題,大致的意思就是日志該怎么打?或者說是,我們應該在日志中打印出哪些內容? 看了該問題,筆者真是有所感慨:從實習到現在,從接的外包小項目到...

    netmou 評論0 收藏0
  • 小談日志與其實踐

    摘要:對于日志級別的分類,有以下參考表示需要立即被處理的系統級錯誤。注意日志的切片設置,以免文件過大不方便操作。過期的日志定期清理。 本文首發于泊浮目的專欄:https://segmentfault.com/blog... 前言 前陣子在論壇上看到一個問題,大致的意思就是日志該怎么打?或者說是,我們應該在日志中打印出哪些內容? 看了該問題,筆者真是有所感慨:從實習到現在,從接的外包小項目到...

    AprilJ 評論0 收藏0
  • 小談網站建設的兼容性

    摘要:本文的兼容性包含了更多的意思,一些和網站開發注意的實際問題。已經快出生十年了,它就是為了解決瀏覽器的兼容性而生的,對于桌面端開發我們還是建議采用這個版本。 本文的兼容性包含了更多的意思,一些和網站開發注意的實際問題。對注重seo的網站幫助更多一些。 關于瀏覽器 現在的前端開發已經開始放棄兼容ie6,ie7,并且也在有條件的放棄ie8。像chrome這樣的現代瀏覽器對新特性支持度都很棒,...

    soasme 評論0 收藏0
  • #yyds干貨盤點#小談startup類ConfigureServices方法的作用

    摘要:依賴注入在應用程序啟動時提供服務。我們可以通過在類的構造方法或方法中包含適當的接口作為參數來請求這些服務。方法只能接受參數,但是可以從這個集合中檢索任何已注冊的服務,因此不需要額外參數。使用在啟動方法中提供需要的任何服務。 這個是我在面試中遇到的一道面試題,記錄下來分享給大家。 簡單說ConfigureServices是配...

    不知名網友 評論0 收藏0

發表評論

0條評論

lidashuang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<