企業應用程序日誌記錄的最佳策略和實踐!
已發表: 2022-02-24應用程序日誌在應用程序運行時傳達與外部和內部事件相關的信息方面發揮著至關重要的作用。 最重要的是,開發人員可以在運行時查看這些信息。 因此,只要在軟件部署中出現錯誤、安全漏洞或異常等事件,應用程序日誌就可以方便地分析事件的根本原因。
結構良好的日誌可以在敏銳的觀察和迅速的行動中創造奇蹟——人們可以輕鬆快速地了解整個系統的運作方式,並有助於提前預防問題。 但是,只有在開發人員堅持有效的日誌記錄實踐時,故障排除會話才會富有成效。 不正確的日誌記錄實踐將導致不必要的挑戰。 現在,您腦海中最可能出現的問題是:
- 要記錄什麼?
- 什麼要避免記錄?
- 如何登錄?
好吧,這篇文章回答了所有這些問題——企業應用程序日誌記錄的最佳實踐以及日誌記錄時要避免的事情。
要遵循的應用程序日誌記錄最佳實踐
了解您的目標受眾
在處理日誌時,重要的是要了解應用程序日誌有兩組不同的受眾——機器和人類——並且它們的數據處理方式完全不同。 如果數據是結構化的,機器可以自動快速地處理大量數據,而人類在處理大量數據時表現不佳,因為他們需要時間來閱讀日誌。 但是,在非結構化數據的情況下,人類勝過機器。
因此,為了從日誌中獲得最佳結果,必須以適合機器和人類的方式創建日誌——為機器結構化,同時對人類可讀。
了解不同日誌級別的使用
日誌級別指示系統內每個事件的嚴重性,軟件開發人員應該知道何時使用它們。 下面給出了最常見的日誌級別及其用例場景。
- 信息級別處理特定於系統或用戶驅動的操作,例如定期安排的操作、關鍵事件橫幅和應用程序行為中存在的信息消息。
- 跟踪級別日誌使您能夠檢查變量值以及完整的錯誤堆棧。 它處理諸如堆棧代碼跟踪之類的信息,以提供有關特定事件的信息。 這些將用於在開發過程中跟踪錯誤。
- 調試級別代表具體和全面的信息。 此日誌可幫助開發人員逐步執行代碼,通常用於調試。
- 錯誤級別表示那些仍然可能讓應用程序持續運行但在受影響路徑中的能力降低的錯誤發生。 因此,此級別用於記錄錯誤條件——內部錯誤事件或返回錯誤的 API 調用。
- 警告級別表示危害小於錯誤的事件,但表示必須調查的危險信號。 因此,使用此級別來記錄那些可能成為錯誤的事件——內存緩存接近容量或數據庫調用超過預定義持續時間的實例。 警告級別日誌將激活自動警報,當在故障排除時使用時,它將使您能夠了解系統在發生故障之前的行為。
- 致命級別表示可能導致應用程序中止並導致災難性故障的嚴重錯誤事件。 以致命級別記錄通常表示程序的結束。 因此,該程序應謹慎使用,只有在退出時才是唯一明智的選擇。
使用可以輕鬆解析的日誌格式
您的可觀察性平台無法從您的日誌中提取數據是不可取的。 為避免這種情況,您需要使用可以輕鬆解析的日誌格式。 此外,保持一致的日誌結構,以便輕鬆收集和匯總數據。
在多個平台服務於共同目的的情況下,為所有應用程序標準化日誌格式。 即使涉及每個應用程序的團隊需要對不同屬性的可見性,這也將簡化將數據合併到可觀察性平台的過程。 並且,如果使用自定義格式,請設置日誌類型觸發器並創建客戶定義的解析規則。
使用有效的工具和完善的框架來創建日誌
利用久經考驗的日誌框架和工具,而不是通過創建自己的日誌環境來重新發明輪子。 此舉不僅可以節省您的時間和麻煩。 此外,一致的日誌記錄框架具有以下功能。
日誌框架的標準特性
- 設置各種 appender,每個 appender 都有自己的自定義日誌模式和輸出格式
- 自動添加記錄器名稱和時間戳
- 提供對多個安全級別的支持以及按這些級別進行過濾的選項
日誌框架的高級功能
- 為不同的代碼組件配置各種日誌級別閾值
- 每當隊列變滿時,使用有損附加器將事件丟棄在較低級別
- 使用日誌匯總附加程序,該附加程序將通過消息顯示特定消息已重複的次數; 而不是重複這麼多次。
- 在日誌級別設置一個閾值,然後將其配置為“同時輸出 N 個較低級別的日誌行”,只要日誌嚴重性很高。
創建對開發人員友好的簡潔日誌消息
如果您的日誌消息攜帶的信息較少,則很難捕獲創建每個關鍵事件的上下文所需的必要信息。 而且,如果日誌消息太長,就會出現性能問題。 例如,大的日誌文件意味著更高的 I/O 和更多的磁盤空間消耗,如果文件系統不支持這一方面,則會對整體性能產生不利影響。 簡而言之,龐大的日誌會佔用存儲空間,降低搜索日誌的速度,分散對核心問題的注意力,從而使調試更加困難。

為了解決這個問題,需要優化日誌消息。 為此,您需要嚴格了解系統的功能和非功能期望,並相應地規劃您將記錄的消息的質量和數量。 簡而言之,您需要在日誌消息的質量和數量之間取得完美的平衡——每條日誌消息都應該是有意義的並且與上下文相關。 例如,當應用程序無法從內部 API 連接和檢索數據時,記錄來自 API 的錯誤消息或生態系統的網絡狀態信息比包含有關正在運行的應用程序數量或內存空間的信息更重要應用程序使用。
應避免的應用程序日誌記錄做法
在沒有適當加密的情況下記錄敏感數據
應用日誌不應暴露以下敏感數據:
- PII 或個人身份信息,例如用戶名、名字/姓氏、出生日期、性別、帳單/郵寄地址、電子郵件 ID、聯繫電話、信用卡號、社會保險號等。
- 企業名稱/聯繫信息,例如企業名稱; 相關人員,包括員工、客戶等; 業務關係; 以及與第三方的業務相關交易。
- 安全憑證、密碼和身份驗證令牌
- 財務數據,例如卡詳細信息、銀行帳號和交易金額。
GDPR、HIPAA 和 CCPA 等大多數隱私法律/法規都建議不要通過日誌顯示上述信息,因為這可能會導致安全漏洞和嚴重的訴訟。 根據標準協議,如果日誌中存在任何財務數據,則必須將其完全屏蔽或隱藏。 而且,如果必須提及任何業務交易,則必須使用系統生成的事件 ID 而不是真實的業務名稱/標識符。
如果需要在非生產環境中記錄一些敏感的用戶數據,如何保證安全?
- 指定要從日誌中隱藏的信息片段——將屬性附加到每個字段,並使用“show”、“hide”、“mask”和“encrypt”等命令提及其可見性級別。
- 編寫解析器以過濾日誌消息並根據相關環境處理符合預定義指令的敏感字段。
供應商鎖定
您的日誌管理應該以您不會被鎖定到特定供應商的方式組織。 因此,避免硬編碼供應商庫; 相反,選擇標準庫/包裝器以實現可移植性。 使用包裝器將確保您的應用程序的代碼沒有明確提及第三方工具,或者您可以按照 apt 方法創建一個記錄器接口並包含一個將實現它的類。 此後,將調用第三方的代碼添加到此類。
記錄消息僅用於故障排除
我們都知道故障排除是日誌記錄的關鍵目的。 然而,您的日誌消息不應僅用於故障排除,因為日誌消息在其他一些任務中也非常有用。 因此,除了故障排除之外,您還可以為以下業務任務記錄消息:
- 分析:記錄時間戳(有時達到毫秒級別)可用作分析程序部分的有效工具。 例如,如果您記錄操作的開始和結束,則可以在故障排除期間推斷某些性能指標,而無需將這些指標添加到程序本身中。
- 審計:捕獲值得注意的事件、描述系統用戶活動的語句——登錄、編輯等。
- 收集統計報告:您可以收集有關正在運行的程序或用戶行為的有趣統計數據。 您還可以將其連接到警報系統,以檢測連續發生的過多錯誤。
結束語
今天,日誌記錄在任何企業的多個方面都發揮著關鍵作用——商業智能、運營和營銷策略。 而且,遵循正確的日誌記錄技術並使您的日誌有效地發揮作用非常重要。 堅持日誌監控和管理的最佳實踐將幫助您順利運行業務,更快地解決問題,從而加快開發過程。
如需技術幫助,請聯繫 Biz4Solutions,這是一家印度經驗豐富且稱職的外包軟件開發公司。 10 多年來,我們一直為全球客戶提供卓越的服務。
