應用層日志記錄


任何系統都有可能會出現問題,出現問題時我們的第一反應是為什么會出錯?出錯時發生了什么?如何復現?

如果你記錄了完善的日志,那么只要一看日志,你就能快速知道程序出現錯誤時究竟發生了什么,進而追溯到導致錯誤發生的原因,從而修復問題。

可以說一個日志記錄是一個完善的系統必不可少的一部分。本文簡單探討為什么記錄日志,怎么記錄日志以及記錄日志的方法。

應用層日志作用

總的來說,日志的根本作用是記錄必要的程序執行過程和狀態,以便於以后追溯和參考。

跟蹤調試

在很多特殊環境下,不能使用單步調試等方法實時知道程序的執行情況,這時就需要使用日志來記錄程序執行情況。

幫助開發人員或者測試人員知道程序執行的過程和狀態,進而完善程序和定位解決BUG等。

跟蹤排查錯誤

當錯誤發生時,我們需要知道當時的程序執行情況,比如執行到那一步,執行時的個變量狀態等。

我們需要通過對日志追蹤,獲取該錯誤發生時的具體執行環境,只有通過這些信息,我們才能分析出錯誤出現的原因,以及如何修正錯誤。

備案

另外,對於一些特別敏感信息的操作,比如涉及金錢的操作,需要記錄所有的流水日志,以供以后對賬等參考。

而且這些日志也能夠在系統出現問題時,恢復數據,降低經濟損失。

日志的分類

可以根據日志的用途對日志進行分類,也可以根據日志的必要性或者等級來進行分類,常用的分級方法依據日志的嚴重等級,如下:

  • TRACE級:盡量詳細的信息,以便於開發過程中觀察,在開發完上線后應該被屏蔽,
  • DEBUG級:記錄用於調試過程中的一些必要信息,在開發完上線后應該被屏蔽
  • INFO級:記錄程序執行的關鍵步驟,在以后具有參考價值,在線上系統中有保留的價值
  • WARN級:屬於輕微的“警告”,記錄程序出現的異常情況,但是不影響正常使用
  • ERROR級:屬於“普通的錯誤”,在程序可以控制的范圍內,不會造成連鎖影響或巨大影響
  • FATAL級:屬於“致命錯誤”,可導致整個系統或者一系列功能無法使用,甚至導致系統癱瘓、關閉
  • EMERG級:屬於“災難”級,導致整個系統崩潰

其中TRACE級和DEBUG級的日志,只用於開發調試過程中,記錄信息所在空間大,應該在開發完成后關閉。

在很多系統中可以不用這么細致的分類,但是一個完善的日志系統最起碼包含三個以上基本基本的日志:

如可以只包含DEBUG級,INFO級,ERROR級。

日志系統設計

在一個系統設計的前期,就應該規划好完善的日志記錄方案,因為日志記錄伴隨在系統開發的沒一個部分。

如果指靠在系統完成后在添加必要的日志記錄是不現實的。

明確日志記錄的目的

需要明確記錄的日志是什么樣的人使用:

  • 開發人員需要使用的信息:DEBUG級等
  • 運維人員需要知道的信息:ERROR級等
  • 系統使用人員需要知道的信息:日志的輸出和反饋等
  • 系統審計人員需要知道的信息:關鍵業務INFO級日志

針對不同的使用人員,我們還應該規划合適的日志記錄形式。

日志格式

隨着系統的運行,日志肯定是不斷增長的,為了以后能夠快速找到需要的日志,需要注意一下幾點:

  • 善用日志分級,不濫用日志,不關鍵的日志應該在線上系統屏蔽
  • 為不同的日志總類添加標簽,以便快速查找特定類型日志
  • 按照日期分類,一方面便於日志轉存,另外也助於快速定位日志
  • 日志應該有相對標准的格式,比如json,序列化等,以便於查找關鍵信息

總的來說,日志的記錄一定是為了以后的追蹤和讀取,應充分考慮到以后獲取日志的情形。

日志記錄應注意的問題

  • 性能損耗:日志記錄不應過於頻繁,應考慮到日志記錄到來的系統性能損耗
  • 安全性:不在日志中記錄涉及安全的敏感信息,如在日志中記錄用戶密碼是絕對禁止的
  • 時效性:應該定期清理沒有參考意義的日志,避免日志積累過多占用系統存儲空間

日志的存儲方式

常見的日志存儲系統如下:

  • 系統自帶文件系統
  • 分布式文件存儲系統
  • Mysql數據庫
  • Mongodb數據庫

無論是哪一種存儲方式,都要考慮到以后查詢日志的遍歷性,日志存儲的性能損害,日志的用途等。

在一些需要對日志進行大數據分析的場景,還需要把日志轉存到HDFS等專門的環境中。

實際應用

在不同的業務場景,需要記錄的日志內容是千差萬別的,但是它們的本質一定是為了之后的追溯使用。

在想Java,PHP等實際語言的開發中,可以為一個系統封裝一個統一的入口Log日志記錄類。

在這個Log類中規定統一的日志格式以及各種不同的日志記錄級別,還可以在這個類中附加額外的信息等。

絕對避免在系統中隨意記錄日志。

原文更新至:< http://uusama.com/875.html>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM