日誌模塊---logging
阿新 • • 發佈:2018-07-08
函數名 debug oot 就會 級別 con img line 表示
一日誌的級別
一般日誌默認有五種級別分別對應緊急程度:
debug:一般為調試日誌 級別號:10
info :一般為正常信息 級別號:20
warning:一般為警告信息 級別號:30
error :一般為錯誤信息 級別號:40
critical :一般為嚴重的錯誤信息 級別號:50
二日誌格式的簡單配置 logging.basicConfig
日誌不可能只打印信息,還有有相應的比如說時間啊,訪問的地方等等
所以配置日誌的格式還是很必要的,其級別不設置,默認打印級別是warning
logging.basicConfig( # filename=‘access.log‘, #這裏寫了就會輸出到文件,沒寫就會輸出到屏幕View Codeformat=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘, datefmt=‘%Y-%m-%d %H:%M:%S %p‘, level=10) #level表示級別也即是debug級別及以上 logging.debug(‘測試著玩‘) logging.info(‘運行還算正常‘) logging.warning(‘可能要有bug了‘) logging.error(‘不好了,出bug了‘) logging.critical(‘完蛋了‘) ‘‘‘ 結果: 2018-07-08 10:23:33 AM - root - DEBUG -練習: 測試著玩 2018-07-08 10:23:33 AM - root - INFO -練習: 運行還算正常 2018-07-08 10:23:33 AM - root - WARNING -練習: 可能要有bug了 2018-07-08 10:23:33 AM - root - ERROR -練習: 不好了,出bug了 2018-07-08 10:23:33 AM - root - CRITICAL -練習: 完蛋了 默認打印級別是warning,上面沒有指定名稱默認為root‘‘‘
上面的level也可以改成 level=logging.DEBUG
但是上面的方法有幾個缺點:
1 編碼格式不能設置,輸出到文件後,中文會變成亂碼
2 不能同上輸出到文件和屏幕
三 logging的對象方式
logging的對象方式可以設置同時在文件和屏幕輸出,並且文件的內容和屏幕的內容可以設置記錄和輸出不同的級別,還可以設置綁定不同的日誌格式。
import logging #1產生日誌 logger1=logging.getLogger(‘訪問日誌‘) #相當於實例化了一個對象 #括號內的內容是給一個名稱 sh=logging.StreamHandler() #View Code打印到終端 fh1=logging.FileHandler(‘s1.log‘,encoding=‘utf-8‘) #打印到文件 fh2=logging.FileHandler(‘s2.log‘,encoding=‘utf-8‘) ##打印到文件 #日誌格式,設置不同的日誌格式 formatter1=logging.Formatter(fmt=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘,datefmt=‘%Y-%m-%d %H:%M:%S %p‘,) formatter2=logging.Formatter( fmt=‘%(asctime)s : %(message)s‘, datefmt=‘%Y-%m-%d %H:%M:%S %p‘, ) formatter3=logging.Formatter( fmt=‘%(asctime)s : %(module)s : %(message)s‘, datefmt=‘%Y-%m-%d %H:%M:%S %p‘, ) #為handler綁定日誌格式 sh.setFormatter(formatter1) fh1.setFormatter(formatter2) fh2.setFormatter(formatter3) #為logger綁定handler logger1.addHandler(sh) logger1.addHandler(fh1) logger1.addHandler(fh2) #設置日誌級別:logger對象的日誌級別應該 <= handler的日誌級別 #因為如果大於的話,handler設置的級別就沒有意義,別logger過濾掉了 logger1.setLevel(10) #這個級別要小於下面的handler日誌級別 sh.setLevel(10) fh1.setLevel(10) fh2.setLevel(10) #測試 logger1.debug(‘測試著玩‘) logger1.info(‘運行還算正常‘) logger1.warning(‘可能要有bug了‘) logger1.error(‘不好了,出bug了‘) logger1.critical(‘完蛋了‘)
其流程圖如下:
配置參數如下:
logging.basicConfig()函數中可通過具體參數來更改logging模塊默認行為,可用參數有: filename:用指定的文件名創建FiledHandler,這樣日誌會被存儲在指定的文件中。 filemode:文件打開方式,在指定了filename時使用這個參數,默認值為“a”還可指定為“w”。 format:指定handler使用的日誌顯示格式。 datefmt:指定日期時間格式。 level:設置rootlogger(後邊會講解具體概念)的日誌級別 stream:用指定的stream創建StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默認為sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。 format參數中可能用到的格式化串: %(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用戶輸出的消息View Code
日誌模塊---logging