日誌規範與自動刪除

2021-08-25 08:19:08 字數 1672 閱讀 1012

日誌規範

1.1. 目的

在正式環境執行時,程式出現問題是能夠提供足夠的資訊來幫助開發人員找到問題。

1.2. 要求

為了達到這樣的目的,要求要準確的在問題發生時暴露問題原因,執行內容上下文(報

錯的位置,層級),執行的引數。通過這些列印的日誌能夠反向發現問題出現的地方和原因。

那麼就有如下要求:

列印日誌級別要嚴格區分,拒絕所有操作不區分層級列印同一級別日誌

(1) debug 開發除錯時使用 debug 級別 除錯資訊,可記錄詳細的業務處理到哪一步了,

以及當前的變數狀態

(2) info 業務結果說明

(3) error 發生錯誤的業務日誌說明 執行期錯誤

舉例說明:

1】假設乙個標準的 mvc 模式的後台 controller-service-dao 層

乙個請求過來,假設在 service 層中報錯,那麼在 service 的異常捕獲就應該捕獲錯

誤,描述錯誤型別,然後組裝自定義的業務異常類,向上層丟擲,拋向 controller 層。

本層不用記錄錯誤日誌(因為上層會自己列印):這裡所說的異常是指的中斷服務了的

異常,停止繼續進行本次請求。

另外一種情況是指的:本層業務處理失敗,但是有存在補救或者異常處理後可以繼

續執行的,在當前層列印錯誤日誌:當前方法 方法傳入引數 以及錯誤原因 補救方式。

controller 層捕獲這個異常後,知道是業務異常後,將本次請求的鏈結,引數和異

常的錯誤資訊(message 和 stacktrace 資訊)組織錯誤日誌輸出。

然後組裝錯誤返回資訊作為返回值。

2】切勿使用 aop 層列印全部日誌,效能很堪憂的。會占用相當多的 i/o,導致服

務器的處理效能下降。 (tfinfo的14秒到4秒就是處理了aop層的日誌列印降為了debug

級,正式環境不輸出即可)

1.2.1. 基本的 logger 編碼規範

1.在乙個物件中通常只使用乙個 logger 物件,logger 應該是 static final 的,只有在少數

需要在建構函式中傳遞 logger 的情況下才使用 private final。

2.輸出 exceptions 的全部 throwable 資訊,因為 logger.error(msg)和

logger.error(msg,e.getmessage())這樣的日誌輸出方法會丟失掉最重要的

stacktrace 資訊。

3.不允許記錄日誌後又丟擲異常,因為這樣會多次記錄日誌,只允許記錄一次日誌。

4.不允許出現 system print(包括 system.out.println 和 system.error.println)語句。

5.不允許出現 printstacktrace。

6.有意義的日誌

通常情況下在程式日誌裡記錄一些比較有意義的狀態資料:程式啟動,退出的時間點;程式

執行消耗時間;耗時程式的執行進度;重要變數的狀態變化。

初次之外,在公共的日誌裡規避列印程式的除錯或者提示資訊。

1.3. log4j.properties 的配置

配置示例:

可以關閉日誌

log4j.rootlogger=all,debug,infofile,errorfile

日誌規範與常用日誌技巧

1.什麼時候應該列印日誌 a.需要定位問題,使用日誌替代debug b.遇到if else或者switch分支,首行列印,確定進入哪個分支 c.核心功能,需要通過日誌看到整個流程 2.基本格式,引數化資訊的方式 logger.debug processing trade with id and sy...

自動刪除n天前日誌

linux是乙個很能自動產生檔案的系統,日誌 郵件 備份等。雖然現在硬碟廉價,我們可以有很多硬碟空間供這些檔案浪費,讓系統定時清理一些不需要的檔案很有一種爽快的事情。不用你去每天惦記著是否需要清理日誌,不用每天收到硬碟空間不足的報警簡訊,想好好休息的話,讓我們把這個事情交給機器定時去執行吧。1.刪除...

windows下自動刪除日誌檔案

每天自動執行的任務都會生成日誌檔案,為了避免檔案過多給伺服器大利來壓力,使用windows批處理指令碼自動刪除 delete log.bat echo off forfiles p d kettlejob log m d txt d 6 c cmd c del f path echo on 刪除d ...