Skip to content

Latest commit

 

History

History
45 lines (28 loc) · 3.42 KB

logging.md

File metadata and controls

45 lines (28 loc) · 3.42 KB

Logging

使用時機 ??

Event, Message, Level/Severity ??

Log Level -- DEBUG, INFO, WARNING, ERROR, CRITICAL ??

  • 就如同 comment 要說明一些假設時用 assertion 取代,當 comment 要說明接下來這一段 code 要做什麼時,可以考慮用 INFO/DEBUG log 取代。
  • DEBUG 雖然做為 diagnostic 用途,但若是 variable data 用 debug 印出,平常 level 就要開 DEBUG? 看來做為能 reproduce 某個 error 的 input 都要用 INFO 寫出才行?? => 可以在發生錯誤時,挾帶足夠的資訊,平常不用輸出 debug 也沒關係,這樣似乎取得了折衷?
  • 最難區分的是 DEBUG 與 INFO;INFO 用在 business/domain 的層級,而 DEBUG 用在實作細節的層級。

參考資料:

Log 加在 operation 前/後? 加在 function 裡/外??

  • Caller 端用 INFO log,內部則用 DEBUG log?? 外部的 script 才知道步驟,而且 function 也可能被不同的 process 調用?
  • Function 內可以用 debug 印出 argument,因為 caller 端的 parameter 可能是計算出來的,要同時做 logging 不太方便;log call 太多會降低可讀性。
  • Function 的 return 值由 caller 來做 log,因為一個 function 可能有多個出口,但 function 內倒是可以 log 出 indirect input。

如何在 log message 揭露重要的數據??

  • Log message 會夾帶有助於診斷問題的資訊,例如 Create user; name = [Jeremy], job = [Developer] ...
  • 其中 [...] 用中括號框起來方便識別空白字元,不過有些語言的 string formatting 支援 literal 輸出,例如 Python 的 %r,用起來像是 logger.info('Create user; name = %r, job = %r', name, job),就不用自己加 [...] 這些框框。

參考資料 {: #reference }

更多: