Python(2.7.6) 標準日誌模組 - Logging Handler

來源:互聯網
上載者:User

標籤:

Python 標準日誌模組使用 Handler 控制日誌訊息寫到不同的目的地,如檔案、流、郵件、socket 等。除了StreamHandler、 FileHandler 和 NullHandler 定義在 logging 模組中,其他的 Handler 均定義在  logging.hangdlers 模組中。這些 Handler 是:WatchedFileHandler、RotatingFileHandler、TimedRotatingFileHandler、SocketHandler、DatagramHandler、SysLogHandler、NTEventLogHandler、SMTPHandler、MemoryHandler、HTTPHandler。

 

RotatingFileHandler 能夠管理記錄檔的大小,當記錄檔的大小達到閾值後,它會重新命名記錄檔,然後再建立一個新的同名記錄檔繼續輸出。

import loggingimport logging.handlershandler = logging.handlers.RotatingFileHandler(    filename    = ‘myapp.log‘,    maxBytes    = 200,    backupCount = 5,)handler.setFormatter(    logging.Formatter(        fmt     = ‘%(asctime)s [%(threadName)s] (%(filename)s:%(lineno)d) %(levelname)s - %(message)s‘,        datefmt = ‘%Y-%m-%d %H:%M:%S‘    ))root = logging.getLogger()root.setLevel(logging.DEBUG)root.addHandler(handler)for i in range(20):    root.debug(‘The Message(%d/20).‘ %  (i + 1))

參數 maxBytes 設定了記錄檔大小的閾值,參數 backupCount 設定了備份檔案的個數。當記錄檔即 myapp.log 的大小達到閾值200位元組的時候,RotatingFileHandler 會將 myapp.log 重新命名為 myapp.log.1,然後再建立一個新的同名記錄檔 myapp.log。當 myapp.log 的大小又達到200位元組時,RotatingFileHandler 將會把 myapp.log.1 重新命名為 myapp.log.2,再把 myapp.log 重新命名為 myapp.log.1,然後再建立一個新的同名記錄檔 myapp.log。這樣反覆直到建立了5個備份檔案後,當 myapp.log 的大小再次達到200位元組時,RotatingFileHandler 不會將 myapp.log.5 重新命名為 myapp.log.6 而是將其刪除。

 

TimedRotatingFileHandler 和 RotatingFileHandler 類似,不過,TimedRotatingFileHandler 沒有通過判斷檔案大小來決定何時重新建立記錄檔,而是間隔一定時間就自動建立新的記錄檔。重新命名的過程中,備份記錄檔的尾碼不是數字,而是目前時間。

import loggingimport logging.handlersimport timehandler = logging.handlers.TimedRotatingFileHandler(    filename    = ‘myapp.log‘,    when        = ‘M‘,     interval    = 2,     backupCount = 3,)handler.setFormatter(    logging.Formatter(        fmt     = ‘%(asctime)s [%(threadName)s] (%(filename)s:%(lineno)d) %(levelname)s - %(message)s‘,        datefmt = ‘%Y-%m-%d %H:%M:%S‘    ))root = logging.getLogger()root.setLevel(logging.DEBUG)root.addHandler(handler)for i in range(20):    root.debug(‘The Message(%d/20).‘ %  (i + 1))    time.sleep(30)

參數 interval 設定了時間間隔,參數 when 設定了間隔的單位。when 的取值可以是 ‘S‘(秒)、 ‘M‘(分)、 ‘H‘(小時)、 ‘D‘(天)、 ‘W0‘ - ‘W6‘(周一至周六)、 ‘midnight‘(淩晨),當 when 的取值是 ‘W0‘ - ‘W6‘ 或 ‘midnight‘ 時,參數 interval 的取值是被忽略的。

 

SMTPHandler 能夠通過 SMTP 將日誌訊息發送到郵件伺服器中。

import loggingimport logging.handlershandler = logging.handlers.SMTPHandler(    mailhost    = (‘smtp.163.com‘, 25),    fromaddr    = ‘[email protected]‘,    toaddrs     = ‘[email protected]‘,    subject     = ‘SMTPHandler Demo‘,    credentials = (‘[email protected]‘, ‘123456‘))handler.setLevel(logging.CRITICAL)handler.setFormatter(    logging.Formatter(        fmt     = ‘%(asctime)s [%(threadName)s] (%(filename)s:%(lineno)d) %(levelname)s - %(message)s‘,        datefmt = ‘%Y-%m-%d %H:%M:%S‘    ))root = logging.getLogger()root.addHandler(handler)root.critical(‘This is a critical message‘);

 

其他 Handler 的用法樣本待補充。

 

Python(2.7.6) 標準日誌模組 - Logging Handler

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.