日誌怎麼打提示詞:日誌級別規範、結構化日誌與敏感資料脫敏(附改寫對照)

線上出問題翻日誌卻找不到有用資訊、或者日誌太多太亂時用:讓 AI 審查一段代碼的日誌寫法,按統一的級別規範和結構化格式改寫,補上排查必需的上下文字段,並去掉密碼、手機號等不該打的內容。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
請作為一名負責線上穩定性的工程師,審查並改進下面代碼中的日誌。

資訊:
- 語言與日誌庫:[語言與日誌庫](例:Java + SLF4J/Logback)
- 日誌最終去向:[如 ELK、雲日誌服務、只在伺服器文件裏]
- 團隊已有的日誌約定:[沒有就寫無]
- 代碼:
  [粘貼代碼]

先給出一份適合我們的日誌規範(簡短,可以直接放進團隊文檔):
- 每個級別的使用標準:ERROR(需要人處理的失敗)、WARN(異常但已自動處理,如重試成功、降級)、INFO(關鍵業務節點,如訂單創建、狀態變化)、DEBUG(排查細節,線上預設關閉);
- 每條日誌必須帶的字段:時間、級別、服務名、trace id 或請求 id、關鍵業務 id;
- 消息寫法:用固定的事件名加字段,不要把變量拼進句子裏;
- 禁止記錄的內容:密碼、令牌、完整身份證號和銀行卡號、完整手機號,以及大段的請求體和響應體。

然後按規範審查代碼,逐條指出:
1. 級別用錯的(比如可預期的用戶輸入錯誤打成 ERROR,會觸發無意義的告警);
2. 缺少上下文、出問題時無法定位的;
3. 吞掉異常、或者只打印異常消息丟了堆棧的;
4. 同一個錯誤在多層重複打印的;
5. 在循環裏打日誌、可能刷屏的;
6. 包含敏感資料的,給出脫敏寫法。

最後輸出改寫後的代碼,並給出一個「改寫前 / 改寫後」的日誌輸出對照示例。

高亮處換成你自己的內容:[語言與日誌庫]、[如 ELK、雲日誌服務、只在伺服器文件裏]、[沒有就寫無]、[粘貼代碼]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[日誌最終去向] 會影響建議:進了 ELK 這類日誌平台,就應該輸出 JSON 結構化日誌方便按字段檢索;只看伺服器文件的,可讀性更重要。[團隊已有的日誌約定] 有就貼上,AI 會在現有約定上補充而不是推翻。

常見坑:

  • 把用戶輸錯密碼、參數校驗失敗這類正常情況打成 ERROR,告警響個不停,真正的故障反而被淹沒。
  • 異常只打印 e.getMessage(),丟掉了堆棧;或者在每一層都 catch 打印一遍再拋出,同一個錯誤出現五次。原則是:要麼處理並記錄,要麼往上拋,不要兩樣都做。
  • 「先打出來再說」地記錄整個請求體,很容易把手機號、地址甚至密碼寫進日誌,日誌系統通常比數據庫的權限管控更松。

追問技巧:追問「把我們最常見的三類故障(如支付失敗、接口超時、庫存不足)各寫一條理想的日誌,說明排查時會用哪些字段過濾」。

示例輸出

示例,僅供參考(改寫對照)

改寫前:

ERROR 下單失敗 用戶13812345678 token=eyJhbGciOi... 錯誤: 庫存不足

改寫後(JSON 結構化,庫存不足屬於可預期的業務拒絕,降為 WARN):

json
{"level":"WARN","event":"order_create_rejected","reason":"out_of_stock","order_id":"O20261003001","user_id":10086,"phone":"138****5678","trace_id":"7f3a9c2e"}
問題位置修改
打印完整 token第 22 行刪除,不記錄任何令牌
只打印異常消息第 40 行把異常對象作為最後一個參數傳給日誌方法,保留堆棧

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~