Python之日誌操做(logging)

import logging
 
一、自定義日誌級別,日誌格式,輸出位置
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s | %(levelname)s| %(message)s‘,%(name)s root log是?
filename='filepath'
filemode='w'
)
level :指定root logger的日誌級別(DEBUG)
format:日誌格式
filename:文件寫入的路徑
filemode:末填寫,默認是追加方式’a‘
日誌級別排序:CRITICAL>ERROR>WARNING>INFO>DEBUG>NOTEST
logging.debug('debug info')
logging.info('info log')
logging.warning('warning log')
logging.error('error log')
級別從低到高
結果:
2017-06-25 09:12:00,025 | DEBUG| debug info
2017-06-25 09:12:00,025 | INFO| info log
2017-06-25 09:12:00,025 | WARNING| warning log
2017-06-25 09:12:00,025 | ERROR| error log
 
(1)format:指定handler使用的日誌顯示格式,即日誌打印的格式字符串。可
用到的格式化串:
%(name)s:Logger的名字;
%(levelno)s:日誌級別的數值;
%(levelname)s:日誌級別名稱;
%(pathname)s:當前執行程序的路徑,其實就是sys.argv[0],可能沒有;
%(filename)s:調用日誌輸出函數的模塊的文件名;
%(module)s:當前執行程序的程序名;
%(funcName)s:日誌輸出函數的函數名;
%(lineno)d:日誌輸出函數的語句所在的代碼行;
%(created)f:當前時間,用UNIX標準的表示時間的浮點數表示;
%(relativeCreated)d:輸出日誌信息時的,自Logger建立以來的毫秒數;
%(asctime)s:字符串形式的當前時間。默認格式是 「2016-06-06
16:49:45,896」。逗號後面的是毫秒;
%(thread)d:線程ID。可能沒有;
%(threadName)s:線程名。可能沒有;
%(process)d:進程ID。可能沒有;
%(message)s:用戶輸出的消息;
 
二、基礎知識
(1)root log是全部日誌實例的祖先
(2)其餘的日誌實例經過logging.getLogger('logname')來獲取實例
(3)子節點會繼承root log 的全部屬性
(4)日誌具備傳遞性,在子節點上寫的日誌,會繼承父節點的日誌handler,並處理。
(5)對於一個logger,能夠設置fileHandler和streamhandler
FileHandler:用於寫入日誌文件
StreamHander:用於輸出到控制檯
(6)對於一個logger,能夠設置Formatter(輸出的格式)
logging.Filter(name) 過濾出須要的日誌,使用率比較低
 
root Logger的子孫logger的消息不只會發送給他們本身的handler處理,還會發送給其全部的祖
先處理。
 
log1=logging.getLogger('log1') 若是沒有名字,默認爲root
log1.setLevel(logging.INFO)
 
fh=logging.FileHandler('path')
sh=logging.StreamHandler()
fmt=logging.Formatter('%(asctime)s|%(name)s|%(filename)s|%(levelname)s|%(message)s')
fh.setFormatter(fmt)
sh.setFormatter(fmt)
log1.addHandler(fh)
log1.addHandler(sh)
 
log2=logging.getLogger('log1.log2') log1是log2的父節點
log2.info('log2 info msg')
log1.info('handler log test')
root默認有streamhandler,
 
三、root log 是全局惟一的
對root log進行配置的時候(使用logging.basicConfig來配置),後面的配置會覆蓋前面的
只用root log的弊端
(1)FileHandle 和 StreamHandle不能並存,使用不方便
filename='path' #FileHandle
stream=sys.stdout #StreamHandle 輸入到控制檯
(2)不能配置多個FileHandle
 
四、日誌自動分文檔存儲
import logging
import logging.handlers
 
rootLog=logging.getLogger()
rootLog.setLevel(logging.DEBUG)
fh=logging.handlers.RotatingFileHandler('path',maxBytes=512,backupCount=3)
maxBytes:每一個日誌最大的存儲空間
backupCount:能夠備份三個日誌
fmt=fh.setFormatter(fmt)
rootLog.addHandler(fh)
for i in xrange(10000):
rootLog.info('info log')
 
五、日誌操做:logging模塊提供的日誌處理組件
(1)Logger :提供應用程序可直接使用的接口
(2)Handler :發送日誌到適當的目的地
(3)Filter :提供了過濾日誌信息的方法
logging.Filter('name')
把log爲name的實例和該實例下的全部子實例的log顯示出來
(4)Formatter :指定日誌顯示格式
相關文章
相關標籤/搜索