欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python日志模塊學習,從這里開始...

系統 1853 0

消息與記錄

剛才談到了關于歷史賬號的文章與消息記錄,所以今天想跟大家聊聊Python關于消息記錄的模塊:日志管理模塊?logging。
學習python的第一課,肯定都是 print('Hello Wrold...') 。但print僅僅使用于我們日常學習,當我們的程序需要部署上線時,程序必須要具備記錄日志與程序輸出的功能。此時print就不能滿足我們的需求,而logging應運而生。
logging是python的內置模塊,無需安裝即可直接使用。logging模塊借鑒了Apache的Log4j中很多的功能與特性,使用起來較為方便,不論你是最簡單無腦輸出還是定義自己的過濾器與格式,最終都能滿足大家的需求,所以logging模塊是你的必修課!

Logging入門

日志級別

不論是python、java還是C,日志的級別都是統一規定的:

日志級別 使用范圍
FATAL 致命錯誤
CRITICAL 嚴重的錯誤,如內存耗盡、磁盤空間不足等.
ERROR 錯誤,如IO異常,文件讀寫異常等
WARNING 警告類錯誤,如用戶輸入密碼即將過期提醒等
INFO 處理請求或者用戶操作的狀態及日常事務日志
DEBUG 調試過程中使用的日志等級,可用于后臺問題定位

那么logging中存在哪些?默認分為六種日志級別(括號為級別對應的數值),NOTSET(0)、DEBUG(10)、INFO(20)、WARNING(30)、ERROR(40)、CRITICAL(50)。

簡單日志打印

說了半天的日志級別,那么這東西對日志記錄有什么用?此時我們需要了解LogLevel。logging模塊默認記錄日志的級別是大于等于WARNING。那么讓我們來看第一個例子:

Python日志模塊學習,從這里開始..._第1張圖片

理想中我們期望的打印結果是從debug到critical,但現實是日志從warning級別開始打印。而且這種日志的打印和print又有什么區別,我們需要豐滿日志的內容,提升逼格。

配置日志輸出

logging提供了basicConfig函數,用于對日志輸入進行相關配置。
讓我們來看看basicConfig有哪些可配置參數吧:
filename: 指定日志文件名
filemode: 和file函數意義相同,指定日志文件的打開模式,’w’或’a’
format: 指定輸出的格式和內容,format可以輸出很多有用信息,如上例所示:
%(levelno)s: 打印日志級別的數值
%(levelname)s: 打印日志級別名稱
%(pathname)s: 打印當前執行程序的路徑,其實就是sys.argv[0]
%(filename)s: 打印當前執行程序名
%(funcName)s: 打印日志的當前函數
%(lineno)d: 打印日志的當前行號
%(asctime)s: 打印日志的時間
%(thread)d: 打印線程ID
%(threadName)s: 打印線程名稱
%(process)d: 打印進程ID
%(message)s: 打印日志信息
datefmt: 指定時間格式,同time.strftime()
level: 設置日志級別,默認為logging.WARNING
stream: 指定將日志的輸出流,可以指定輸出到sys.stderr,sys.stdout或者文件,
????默認輸出到sys.stderr,當stream和filename同時指定時,stream被忽略

Python日志模塊學習,從這里開始..._第2張圖片

通過配置basicConfig,日志輸出看起來就工整多了…當看到第一個filename的時候就想到了,現在的日志都是在控制臺輸出的,我們添加該參數后,就可以將日志輸出到文本了,對吧?答案是肯定的,如下圖:

Python日志模塊學習,從這里開始..._第3張圖片

但此時出現一個問題,我們的日志都保存到了文本中,前臺的控制欄不再具備日志輸出功能了!

Logging進階

剛才提到的入門使用,只是針對logging的一個簡單操作,如果我們想深入的去使用logging模塊,就必須了解Logger,Handler,Formatter,Filter的概念:

  • Logger提供了應用程序可以直接使用的接口;

  • Handler將(logger創建的)日志記錄發送到合適的目的輸出;

  • Filters提供了細度設備來決定輸出哪條日志記錄;

  • Formatter決定日志記錄的最終輸出格式。

Logger

Logger 對象要做三件事情。首先,它們向應用代碼暴露了許多方法,這樣應用可以在運行時記錄消息。其次,記錄器對象通過嚴重程度(默認的過濾設施)或者過濾器對象來決定哪些日志消息需要記錄下來。第三,記錄器對象將相關的日志消息傳遞給所有感興趣的日志處理器。

常用的記錄器對象的方法分為兩類:配置和發送消息。

這些是最常用的配置方法:

Logger.setLevel()指定logger將會處理的最低的安全等級日志信息, debug是最低的內置安全等級,critical是最高的內建安全等級。例如,如果嚴重程度為INFO,記錄器將只處理INFO,WARNING,ERROR和CRITICAL消息,DEBUG消息被忽略。
Logger.addHandler()和Logger.removeHandler()從記錄器對象中添加和刪除處理程序對象。處理器詳見Handlers。
Logger.addFilter()和Logger.removeFilter()從記錄器對象添加和刪除過濾器對象。

Handlers

處理程序對象負責將適當的日志消息(基于日志消息的嚴重性)分派到處理程序的指定目標。Logger 對象可以通過addHandler()方法增加零個或多個handler對象。舉個例子,一個應用可以將所有的日志消息發送至日志文件,所有的錯誤級別(error)及以上的日志消息發送至標準輸出,所有的嚴重級別(critical)日志消息發送至某個電子郵箱。在這個例子中需要三個獨立的處理器,每一個負責將特定級別的消息發送至特定的位置。
其中常用的有4種:

  • logging.StreamHandler -> 控制臺輸出

  • logging.FileHandler -> 文件輸出

  • logging.handlers.RotatingFileHandler

  • logging.handlers.TimedRotatingFileHandler

Formatter

Formatter對象設置日志信息最后的規則、結構和內容,默認的時間格式為%Y-%m-%d %H:%M:%S,下面是Formatter常用的一些信息

參數 說明
%(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 用戶輸出的消息

此時我們就可以實現日志的前后臺輸出了:

Python日志模塊學習,從這里開始..._第4張圖片

此時,前后臺均輸出了相關的日志信息。

Logging特別操作

日志切片

有時候,系統后臺的日志會輸出的比較頻繁,那么我們如何將日志按照大小或者時間進行切片呢?這里就要用到剛才介紹的:

  • logging.handlers.RotatingFileHandler

  • logging.handlers.TimedRotatingFileHandler

每隔 1000 Byte 劃分一個日志文件,備份文件為 3 個
file_handler = logging.handlers.RotatingFileHandler("test.log", mode="w", maxBytes=1000, backupCount=3, encoding="utf-8")

每隔 1小時 劃分一個日志文件,interval 是時間間隔,備份文件為 10 個
handler2 = logging.handlers.TimedRotatingFileHandler("test.log", when="H", interval=1, backupCount=10)

我們以RotatingFileHandler為例,為了演示方便,我設置文件大小為3kb:

Python日志模塊學習,從這里開始..._第5張圖片

最終實現:

Python日志模塊學習,從這里開始..._第6張圖片

關于異常日志

logging模塊在對異常獲取時,進行了相關的優化操作,來看下這個例子:

Python日志模塊學習,從這里開始..._第7張圖片

由此可見,當我們在對異常結果進行日志輸出時,最好使用logger.exception。
其實logging模塊的內容還有很多,比如封裝與繼承,今天就先介紹到這里,有空了繼續為大家補充。

The End

OK,今天的內容就到這里,如果覺得內容對你有所幫助,歡迎點贊。
期待你關注我的公眾號 清風Python ,如果覺得不錯,希望能動動手指轉發給你身邊的朋友們。

作者:清風Python


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲欧美国产视频 | 日本午夜高清视频 | 日本欧美国产精品第一页久久 | 国产小视频在线高清播放 | 精品国产三级 | 亚洲欧洲日产国码在线观看 | 欧美性免费视频 | 欧美在线免费 | 国产黄色网址在线观看 | 欧美黄色网 | 久久久9999久久精品小说 | 天天干狠狠干 | 国产精品久久久久无码av | 麻豆短视频传媒网站怎么找 | 国产日韩欧美在线观看 | 日本三级香港三级人妇99 | ririsao久久精品一区 | 五月综合色 | 亚洲一区二区三区深夜天堂 | 男人和女人做爰毛片试看 | 美女午夜色视频在线观看 | 青草视频在线免费观看 | 精品一区二区三区不卡 | 九九热在线精品视频 | 亚洲免费一级视频 | 免费国产黄频在线观看视频 | 欧美日韩不卡 | 四虎永久免费网站入口2020 | 好骚综合97op | 女人被男人狂躁下面在线观看 | 99久久这里只有精品 | 欧美久久一区二区三区 | 猫咪人成免费网站在线观看 | 亚洲日本中文字幕区 | 成年网站在线观看 | 欧美一区二区精品 | 国产成人在线一区二区 | 国产一区二区av | 天天插天天舔 | 亚洲网站在线观看 | 国产精品区一区二区三 |