一、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並且調用:

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

