python的日誌輸出 logging模組

2021-09-22 01:39:44 字數 3676 閱讀 7495

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,這樣會...