1. 程式人生 > >日誌模塊---logging

日誌模塊---logging

函數名 debug oot 就會 級別 con img line 表示

一日誌的級別

一般日誌默認有五種級別分別對應緊急程度:

debug:一般為調試日誌 級別號:10

info :一般為正常信息 級別號:20

warning:一般為警告信息 級別號:30

error :一般為錯誤信息 級別號:40

critical :一般為嚴重的錯誤信息 級別號:50

二日誌格式的簡單配置 logging.basicConfig

日誌不可能只打印信息,還有有相應的比如說時間啊,訪問的地方等等

所以配置日誌的格式還是很必要的,其級別不設置,默認打印級別是warning

技術分享圖片
logging.basicConfig(
    # filename=‘access.log‘, #這裏寫了就會輸出到文件,沒寫就會輸出到屏幕
format=%(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
‘‘‘
View Code

上面的level也可以改成 level=logging.DEBUG

但是上面的方法有幾個缺點:

1 編碼格式不能設置,輸出到文件後,中文會變成亂碼

2 不能同上輸出到文件和屏幕

三 logging的對象方式

logging的對象方式可以設置同時在文件和屏幕輸出,並且文件的內容和屏幕的內容可以設置記錄和輸出不同的級別,還可以設置綁定不同的日誌格式。

技術分享圖片
import logging
#1產生日誌
logger1=logging.getLogger(訪問日誌) #相當於實例化了一個對象
              #括號內的內容是給一個名稱
sh=logging.StreamHandler() #
打印到終端 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(完蛋了)
View Code

其流程圖如下:

技術分享圖片

配置參數如下:

技術分享圖片
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