logging模組是python內建的標準模組,主要用於輸出執行日誌,可以設定輸出日誌的等級、日誌儲存路徑、日誌檔案回滾等;相比print,具備如下優點:
可以通過設定不同的日誌等級,在release版本中只輸出重要資訊,而不必顯示大量的除錯資訊;
print將所有資訊都輸出到標準輸出中,嚴重影響開發者從標準輸出中檢視其它資料;logging則可以由開發者決定將資訊輸出到什麼地方,以及怎麼輸出;
import logging # 引入logging模組
# 將資訊列印到控制台上
logging.debug(u"你好世界"
)logging.info(u"你好世界"
)logging.warning(u"你好世界"
)logging.error(u"你好世界"
)logging.critical(u"你好世界"
)
預設生成的root logger的level是logging.warning,低於該級別的就不輸出了
級別排序: critical > error > warning > info > debug
debug: 列印全部的日誌,詳細的資訊,通常只出現在診斷問題上
info: 列印info,warning,error,critical級別的日誌,確認一切按預期執行
warning: 列印warning,error,critical級別的日誌,乙個跡象表明,一些意想不到的事情發生了,或表明一些問題在不久的將來(例如。磁碟空間低」),這個軟體還能按預期工作
error: 列印error,critical級別的日誌,更嚴重的問題,軟體沒能執行一些功能
critical: 列印critical級別,乙個嚴重的錯誤,這表明程式本身可能無法繼續執行
這時候,如果需要顯示低於warning級別的內容,可以引入notset級別來顯示:
import logging # 引入logging模組
logging.basicconfig(level=logging.notset)
# 設定日誌級別
logging.debug(u"如果設定了日誌級別為notset,那麼這裡可以採取debug、info的級別的內容也可以顯示在控制台上了"
)
import logging # 引入logging模組
import os.path
import time
# 第一步,建立乙個logger
logger = logging.getlogger(
)logger.setlevel(logging.info)
# log等級總開關
# 第二步,建立乙個handler,用於寫入日誌檔案
rq = time.strftime(
'%y%m%d%h%m'
, time.localtime(time.time())
)log_path = os.getcwd()+
'/logs/'
log_name = log_path + rq +
'.log'
logfile = log_name
fh = logging.filehandler(logfile, mode=
'w')
fh.setlevel(logging.debug)
# 輸出到file的log等級的開關
# 第三步,定義handler的輸出格式
formatter = logging.formatter(
"%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"
)fh.setformatter(formatter)
# 第四步,將logger新增到handler裡面
logger.addhandler(fh)
# 日誌
logger.debug(
'this is a logger debug message'
)logger.info(
'this is a logger info message'
)logger.warning(
'this is a logger warning message'
)logger.error(
'this is a logger error message'
)logger.critical(
'this is a logger critical message'
)
生成的日誌檔案如下
# 建立乙個logger
logger = logging.getlogger(
)logger.setlevel(logging.info)
# log等級總開關
# 建立乙個handler,用於寫入日誌檔案
rq = time.strftime(
'%y%m%d%h%m'
, time.localtime(time.time())
)log_path = os.getcwd()+
'/logs/'
log_name = log_path + rq +
'.log'
logfile = log_name
fh = logging.filehandler(logfile, mode=
'w')
fh.setlevel(logging.debug)
# 輸出到file的log等級的開關
# 定義handler的輸出格式
formatter = logging.formatter(
"%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"
)fh.setformatter(formatter)
logger.addhandler(fh)
# 使用logger.xx來記錄錯誤,這裡的"error"可以根據所需要的級別進行修改
try:
open
('/path/to/does/not/exist'
,'rb'
)except
(systemexit, keyboardinterrupt)
:raise
except exception as e:
logger.error(
'failed to open file'
, exc_info=
true
)日誌檔案如下
Django專案如何正確配置日誌 logging
當django專案正式部署上線後,我們需要設定debug false。這時開發者應怎樣檢查django程式在生產環境執行時有什麼異常或錯誤呢?答案就是日誌 logging 在生產環境中,django預設是不會在伺服器上自動生成log檔案的,即使程式出現error級別的故障也不會通知管理員。本文將教你...
python日誌輸出
import logging logger logging.getlogger 生成乙個日誌物件,內為日誌物件的名字,可以不帶,名字不給定就是root,一般給定名字,否則會把其他的日誌輸出也會列印到你的檔案裡。handler logging.filehandler log test.txt 生成乙個...
Python 日誌輸出
列印日誌是很多程式的重要需求,良好的日誌輸出可以幫我們更方便的檢測程式執行狀態。python標準庫提供了logging模組,讓我們也可以方便的在python中列印日誌。完整的使用方法可以參考標準庫文件。這裡做一下簡單介紹。日誌級別有如下幾種。當獲取根logger的時候,預設級別為notset,這樣會...