0.前置說明
- 1.執行環境:Win7虛擬機器、python2.7(anacoda版)
- 2.本文大部分內容引用此參考文獻:http://my.oschina.net/leejun2005/blog/126713
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種類
- logging.StreamHandler
使用這個Handler可以向類似與sys.stdout或者sys.stderr的任何檔案物件(file object)輸出資訊。
它的建構函式是:StreamHandler([strm])
其中strm引數是一個檔案物件。
預設是sys.stderr - logging.FileHandler
和StreamHandler類似,用於向一個檔案輸出日誌資訊。不過FileHandler會幫你開啟這個檔案。
它的建構函式是:FileHandler(filename[,mode])
filename是檔名,必須指定一個檔名。
mode是檔案的開啟方式。
預設是’a’,即新增到檔案末尾。 - 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並不會被更名,而是被刪除。 - logging.handlers.TimedRotatingFileHandler
這個Handler和RotatingFileHandler類似,不過,它沒有通過判斷檔案大小來決定何時重新建立日誌檔案,而是間隔一定時間就 自動建立新的日誌檔案。重新命名的過程與RotatingFileHandler類似,不過新的檔案不是附加數字,而是當前時間。它的建構函式是:
TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])
其中filename引數和backupCount引數和RotatingFileHandler具有相同的意義。
interval是時間間隔。
when引數是一個字串。表示時間間隔的單位,不區分大小寫。它有以下取值:
S 秒
M 分
H 小時
D 天
W 每星期(interval==0時代表星期一)
midnight 每天凌晨 - logging.handlers.SocketHandler
- logging.handlers.DatagramHandler
以上兩個Handler類似,都是將日誌資訊傳送到網路。不同的是前者使用TCP協議,後者使用UDP協議。它們的建構函式是:
Handler(host, port)
其中host是主機名,port是埠名 - logging.handlers.SysLogHandler
- logging.handlers.NTEventLogHandler
- logging.handlers.SMTPHandler
- logging.handlers.MemoryHandler
- 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 | 使用者輸出的訊息 |