Logging常用handlers的使用


一、StreamHandler

流handler——包含在logging模塊中的三個handler之一。

能夠將日志信息輸出到sys.stdout, sys.stderr 或者類文件對象(更確切點,就是能夠支持write()和flush()方法的對象)。

只有一個參數:

日志信息會輸出到指定的stream中,如果stream為空則默認輸出到sys.stderr。

二、FileHandler

logging模塊自帶的三個handler之一。繼承自StreamHandler。將日志信息輸出到磁盤文件上。

構造參數:

模式默認為append,delay為true時,文件直到emit方法被執行才會打開。默認情況下,日志文件可以無限增大。

三、NullHandler

空操作handler,logging模塊自帶的三個handler之一。
沒有參數。

四、WatchedFileHandler

位於logging.handlers模塊中。用於監視文件的狀態,如果文件被改變了,那么就關閉當前流,重新打開文件,創建一個新的流。由於newsyslog或者logrotate的使用會導致文件改變。這個handler是專門為linux/unix系統設計的,因為在windows系統下,正在被打開的文件是不會被改變的。
參數和FileHandler相同:

五、RotatingFileHandler

位於logging.handlers支持循環日志文件。

class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0)

參數maxBytes和backupCount允許日志文件在達到maxBytes時rollover.當文件大小達到或者超過maxBytes時,就會新創建一個日志文件。上述的這兩個參數任一一個為0時,rollover都不會發生。也就是就文件沒有maxBytes限制。backupcount是備份數目,也就是最多能有多少個備份。命名會在日志的base_name后面加上.0-.n的后綴,如example.log.1,example.log.1,…,example.log.10。當前使用的日志文件為base_name.log。

六、TimedRotatingFileHandler

定時循環日志handler,位於logging.handlers,支持定時生成新日志文件。

class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)

參數when決定了時間間隔的類型,參數interval決定了多少的時間間隔。如when=‘D’,interval=2,就是指兩天的時間間隔,backupCount決定了能留幾個日志文件。超過數量就會丟棄掉老的日志文件。

when的參數決定了時間間隔的類型。兩者之間的關系如下:

utc參數表示UTC時間。

七、其他handler——SocketHandler、DatagramHandler、SysLogHandler、NtEventHandler、SMTPHandler、MemoryHandler、HTTPHandler

這些handler都不怎么常用,所以具體介紹就請參考官方文檔 其他handlers

下面使用簡單的例子來演示handler的使用:

例子一——不使用配置文件的方式(StreamHandler):

輸出到控制台的結果:

例子二——使用配置文件的方式(TimedRotatingFileHandler) :

log.conf 日志配置文件:

獲取logger方法:

配置logger並且調用:

控制台和日志文件中都會輸出:

 


免責聲明!

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



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