和在學校做大作業、畢業設計不同,**一旦到了生產環境,查詢問題、服務監控等操作都需要通過日誌來完成了。以前的專案,更多的是從其他同事手中交接一些服務,服務中已經積攢了一些(無論好壞)打日誌的規範和方法。
近期(其實已經一年了,一直懶得總結)由於排期問題,我糙猛快的寫了幾個python的服務;而我之前的同事裡,是沒有人使用py來做專案的,所以總結了一下python中使用日誌的使用方式、配置檔案的編寫,以及一些`helper`方法。
儲存日誌的方式是多種多樣: 使用網路的、使用檔案的、還有使用mongo的。由於公司慣例,全部日誌都會打到檔案裡,然後使用 「年月日時」的方式做為檔名 -- 這是乙個好習慣,能夠很好的控制日誌檔案體積,也能在查詢問題時快速定位日誌; 同時讓日誌的備份與刪除變得容易,只要使用對應的「date」操作就可以完成;還可以根據日誌量粗略判斷服務壓力變化(我知道你們有監控,誰沒有呢)。
在python中,最簡單地使用日誌的方式是這樣了:
#! /usr/bin/env python
import logging as lg
if __name__ == '__main__':
lg.warning('this is a warning')
這時,列印出來的日誌,就會列印到終端(還沒有寫到檔案裡)。如果想寫到檔案,你需要增加一些配置:
#! /usr/bin/env python
import logging as lg
if __name__ == '__main__':
lg.basicconfig(filename='pylog.log')
lg.warning('this is a warning')
重新執行這個檔案,終端的輸出不見了,檔案裡面會記錄你增加的日誌。這樣,你就可以使用grep、sed和awk來處理日誌,查詢響應的資訊了。
`basicconfig`還有一些引數可以設定: filename, filemode, format, datefmt, level, stream。 配合不同的日誌等級,這種使用方式可以滿足絕大多數指令碼的需求。
如果你用過gcc,那你一定忽略warning而不能無視error。在程式中也是一樣: 有一些錯誤是需要你注意的,比如快取容量已經使用了70%,需要你手動干預;一些錯誤需要你起床來處理的,比如db無法連線。人工去過濾這些資訊是不可能的,所以需要合理的使用log level,來完成對應的操作。
python自帶的logging提供了debug、info、warning、error和critical五種不同的日誌級別,用來區分不同的場景。五種級別,嚴重成都遞增,且設定loglevel後(翻到上面,看看baseconfig的介紹),會遮蔽低優先順序的日誌(也就是說,如果你設定log level為warning,那麼info日誌就不會出現在日誌檔案中)。詳細介紹在 。在我日常的使用中,是這樣設定loglevel的:
配合合理的優先順序,當你需要查詢某類日誌時,只需要這麼做:寫道
-> % cat pylog.log | grep '^w'
warning:root:this is a warning
到目前為止,簡單介紹了日誌的使用和分級,後續會介紹生產環境中的一些常用配置,和一些helper方法。
Settings 中 日誌的配置
settings 中 日誌的配置 在settings中配置loggings檔案,在base dir目錄下建立相應的資料夾就可以生成相應的執行日誌了。通過日誌我們可以分析到錯誤在什麼地方,有什麼異常。在生產環境下有很大的用處。django中要用logging 還得有一定的配置規律,setting 中配...
Spring boot中日誌檔案配置
因為spring boot的預設日誌配置存在丟失日誌的情況,所以導致這裡需要手動配置一下日誌。具體配置如下 debug false name log home value log scope context name source resource org springframework boot ...
nodejs中日誌的使用
const logger require morgan var express require express var fs require fs var logger require morgan var accesslogstream fs.createwritestream dirname a...