python(logging )日誌模組學習

發表於2016-06-02

0.前置說明

1.基本元素說明:

  • Logger:用於輸出的日誌的總物件
  • Handlers:用來指定log的輸出方式
  • Formatters:設定日誌資訊的結構和內容格式,預設的時間格式為%Y-%m-%d %H:%M:%S
  • Filter:過濾器,用來過濾的輸出內容(如:只輸出debug以上的內容)

Logger

常用函式

  • LOG=logging.getLogger(”chat.gui”)
  • Logger.setLevel(lel):指定最低的日誌級別,低於lel的級別將被忽略。debug是最低的內建級別,critical為最高
  • Logger.addFilter(filt)、Logger.removeFilter(filt):新增或刪除指定的filter
  • Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或刪除指定的handler
  • Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以設定的日誌級別
  • Logger.log(“debug”,”This is a bug”):可以通過這個函式直接輸出內容並選擇對應的告警級別

內建級別

名稱 對應數字級別
NOTSET 0
DEBUG 10
INFO 20
WARNING 30
ERROR 40
CRITICAL 50

Handlers

1.常用函式

  • Handler.setLevel(lel):指定被處理的資訊級別,低於lel級別的資訊將被忽略
  • Handler.setFormatter():給這個handler選擇一個格式
  • Handler.addFilter(filt)、Handler.removeFilter(filt):新增或刪除一個filter物件

2.Handler種類

  1. logging.StreamHandler
    使用這個Handler可以向類似與sys.stdout或者sys.stderr的任何檔案物件(file object)輸出資訊。
    它的建構函式是:StreamHandler([strm])
    其中strm引數是一個檔案物件。
    預設是sys.stderr
  2. logging.FileHandler
    和StreamHandler類似,用於向一個檔案輸出日誌資訊。不過FileHandler會幫你開啟這個檔案。
    它的建構函式是:FileHandler(filename[,mode])
    filename是檔名,必須指定一個檔名。
    mode是檔案的開啟方式。
    預設是’a’,即新增到檔案末尾。
  3. logging.handlers.RotatingFileHandler
    這個Handler類似於上面的FileHandler,但是它可以管理檔案大小。當檔案達到一定大小之後,它會自動將當前日誌檔案改名,然後建立一個新的同名日誌檔案繼續輸出。比如日誌檔案是chat.log。當chat.log達到指定的大小之後,RotatingFileHandler自動把 檔案改名為chat.log.1。不過,如果chat.log.1已經存在,會先把chat.log.1重新命名為chat.log.2。。。最後重新建立 chat.log,繼續輸出日誌資訊。
    它的建構函式是:RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])
    其中filename和mode兩個引數和FileHandler一樣。
    maxBytes用於指定日誌檔案的最大檔案大小。如果maxBytes為0,意味著日誌檔案可以無限大,這時上面描述的重新命名過程就不會發生。
    backupCount用於指定保留的備份檔案的個數。比如,如果指定為2,當上面描述的重新命名過程發生時,原有的chat.log.2並不會被更名,而是被刪除。
  4. logging.handlers.TimedRotatingFileHandler
    這個Handler和RotatingFileHandler類似,不過,它沒有通過判斷檔案大小來決定何時重新建立日誌檔案,而是間隔一定時間就 自動建立新的日誌檔案。重新命名的過程與RotatingFileHandler類似,不過新的檔案不是附加數字,而是當前時間。它的建構函式是:
    TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])
    其中filename引數和backupCount引數和RotatingFileHandler具有相同的意義。
    interval是時間間隔。
    when引數是一個字串。表示時間間隔的單位,不區分大小寫。它有以下取值:
    S 秒
    M 分
    H 小時
    D 天
    W 每星期(interval==0時代表星期一)
    midnight 每天凌晨
  5. logging.handlers.SocketHandler
  6. logging.handlers.DatagramHandler
    以上兩個Handler類似,都是將日誌資訊傳送到網路。不同的是前者使用TCP協議,後者使用UDP協議。它們的建構函式是:
    Handler(host, port)
    其中host是主機名,port是埠名
  7. logging.handlers.SysLogHandler
  8. logging.handlers.NTEventLogHandler
  9. logging.handlers.SMTPHandler
  10. logging.handlers.MemoryHandler
  11. logging.handlers.HTTPHandler

Formatters

引數 含義
%(name)s Logger的名字
%(levelno)s 數字形式的日誌級別
%(levelname)s 文字形式的日誌級別
%(pathname)s 呼叫日誌輸出函式的模組的完整路徑名,可能沒有
%(filename)s 呼叫日誌輸出函式的模組的檔名
%(module)s 呼叫日誌輸出函式的模組名
%(funcName)s 呼叫日誌輸出函式的函式名
%(lineno)d 呼叫日誌輸出函式的語句所在的程式碼行
%(created)f 當前時間,用UNIX標準的表示時間的浮點數表示
%(relativeCreated)d 輸出日誌資訊時的,自Logger建立以 來的毫秒數
%(asctime)s 字串形式的當前時間。預設格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒
%(thread)d 執行緒ID。可能沒有
%(threadName)s 執行緒名。可能沒有
%(process)d 程式ID。可能沒有
%(message)s 使用者輸出的訊息

相關文章