python中logging使用方法


1.logging提供了一組便利的函數,用來做簡單的日志。它們是 debug()、 info()、 warning()、 error() 和 critical()。

1.1logging以嚴重程度遞增排序:

   DEBUG:詳細信息,一般只在調試問題時使用

   INFO:證明事情按預期工作

   WARNING:某些沒有預料到的時間提示,或者在將來可能會出現的問題提示。例如:磁盤空間不足,但是軟件還是會照常運作

   ERROR:由於更嚴重的問題,軟件已不能執行一些功能了

   CRITICAL:嚴重錯誤,表明軟件已不能繼續運行了

   級別排序:CRITICAL>ERROR>WARNING>INFO>DEBUG

   默認等級是WARNING

1.2打印到控制台

import logging logging.debug('debug 信息') logging.warning('只有這個會輸出。。。') logging.info('info 信息')

  由於默認設置的等級是warning,所有只有warning的信息會輸出到控制台。

WARNING:root:只有這個會輸出。。。

 利用logging.basicConfig()打印信息到控制台

import logging
logging.basicConfig(format='%(asctime)s - %(pathname)s[line:%(lineno)d] '
'- %(levelname)s: %(message)s',level=logging.INFO)
logging.debug('debug 信息')
logging.info('info 信息')
logging.warning('warning 信息')
logging.error('error 信息')
logging.critical('critial 信息')

   所以如果設置level = logging.debug()的話,所有的信息都會會輸出到控制台。

   所以如果設置level = logging.info()的話,debug 的信息則不會輸出到控制台。

1.3既往屏幕中寫入,也往文件寫入log

  loggin庫采用了模塊化的設計,提供了許多組件:記錄器(logger),處理器(handler),過濾器(filter),格式化器(formatter)

    Logger 暴露了應用程序代碼能直接使用的接口。

    Handler將(記錄器產生的)日志記錄發送至合適的目的地。

    Filter提供了更好的粒度控制,它可以決定輸出哪些日志記錄。

    Formatter 指明了最終輸出中日志記錄的布局

loggers:要做三件事情。首先,它們向應用代碼暴露了許多方法,這樣應用可以在運行時記錄消息。其次,記錄器對象通過嚴重程度
(默認的過濾設施)或者過濾器對象來決定哪些日志消息需要記錄下來。第三,記錄器對象將相關的日志消息傳遞給所有感興趣的日志處理器。
Loggers的使用方法
  
Logger.setLevel()指定logger將會處理的最低的安全等級日志信息, debug是最低的內置安全等級,critical是最高的內建安全等級。
  Logger.addHandler()和Logger.removeHandler()從記錄器對象中添加和刪除處理程序對象。處理器詳見Handlers。
  Logger.addFilter()和Logger.removeFilter()從記錄器對象添加和刪除過濾器對象。
handlers:處理程序對象負責將適當的日志消息(基於日志消息的嚴重性)分派到處理程序的指定目標。Logger 對象可以通過addHandler()方法
增加零個或多個handler對象。舉個例子,一個應用可以將所有的日志消息發送至日志文件,所有的錯誤級別(error)及以上的日志消息發送至
標准輸出,所有的嚴重級別(critical)日志消息發送至某個電子郵箱。在這個例子中需要三個獨立的處理器,每一個負責將特定級別的消息發
送至特定的位置。
handlers的使用方法:
logging.StreamHandler() -> 控制台輸出
logging.FileHandler(filename[,mode])  -> 文件輸出
logging.handlers.RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]]) -> 按照大小自動分割日志文件,一旦達到指定的大小重新生成文件
maxBytes用於指定日志文件的最大文件大小。如果maxBytes為0,意味着日志文件可以無限大,這時上面描述的重命名過程就不會發生。
backupCount用於指定保留的備份文件的個數。

logging.handlers.TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])  -> 按照時間自動分割日志文件

配置方法:
  • setLevel()方法和日志對象的一樣,指明了將會分發日志的最低級別。為什么會有兩個setLevel()方法?記錄器的級別決定了消息是否要傳遞給處理器。每個處理器的級別決定了消息是否要分發。
  • setFormatter()為該處理器選擇一個格式化器。
  • addFilter()removeFilter()分別配置和取消配置處理程序上的過濾器對象。
使用流程圖:
先獲取記錄器:
self.logger=logging.getLogger()
設置日志等級
self.logger.setLevel(level)
設置日志輸出格式
fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'
format_str = logging.Formatter(fmt)
獲取處理器
sh=logging.StreamHandler()
設置處理器的日志輸出格式
sh.setFormatter(format_str)
添加到處理器中
self.logger.addHandler(sh)
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM