CSDN的查看鏈接:https://blog.csdn.net/zsh773992554/article/details/86022757
????最近復習了一下關于日志模塊震檩,之前我們做的只要是項目歹袁,日志一定是不可缺失的饥漫,因為對于非程序開發(fā)人員,要想判斷程序是否正常運行的必要條件就是查看日志。所以這個對于用戶和運維測試的人員是重中之重,當然開發(fā)人員在開發(fā)過程中也是看日志過來的,不過一般的IDE都有自己的輸出平臺创南,所以報錯信息都可以直接看的。當然直接用text開發(fā)的大佬請忽視我這種菜鳥的觀念
????我之前有過一段時間運維的經驗省核,所以知道一個程序的log文件如果沒有弄好是多么的"惡心"稿辙,面對這一個.txt或者.log等后綴卻有著4G大小的log文件,坦然說如果開發(fā)人員在气忠,我保證不打死他 ["打殘應該可以的"] 邻储。因為運維的電腦配置一般都不是很好,所以每次開個log旧噪,能開到我死機吨娜。然后面對這里面一大堆的時間字符,以及亂七八糟的奇怪說明以及鬼都不知道是報錯還是警告的玩意看起淘钟。倘然你可以說經驗的老司機一看就知道宦赠,但是老司機的熬練過程很煩躁的,如果log規(guī)范些米母,并且報的東西實際意義大一些勾扭,不是什么玩意都報是不是對大家都是一件好事呢?
????好了铁瞒,話題扯的太遠尺借,收一下【猓回到本次主題就是在python中的logging模塊。
概述:日志是記錄著某些軟件在運行時所有發(fā)生的事件
作用:通過log分析虱歪,能夠方便用戶了解系統(tǒng)蜂绎、應用的運行情況。
總結為以下幾點
? 1.程序調試
? ? ? ? ? ? 2.連接軟件程序運行情況笋鄙,是否正常
? ? ? ? ? ? 3.軟件程序運行的故障分析和問題定位
? ? ? ? ? ? 4.如果信息詳細豐富师枣,可以做來用戶行為分析
不同環(huán)境下的日志
在軟件開發(fā)或部署環(huán)境時,日志內容應該是盡可能的詳細萧落,這樣能夠幫助開發(fā)運維人員查看應用程序的運行狀態(tài)践美,以及在各個不同環(huán)境下的情況洗贰。然后我們將所有的運行日志記錄分析,以確保后續(xù)的環(huán)境配置進行更新陨倡。但這是非常消耗機器性能的
正式發(fā)布或者生產環(huán)境部署程序時敛滋,通常只是需要記錄應用的異常和錯誤信息,類似程序崩潰兴革,數(shù)據(jù)訪問失敗等绎晃。這樣可以減小服務器的I/O訪問壓力,也能夠方便故障排查
那么這個時候就是日志等級的體現(xiàn)了杂曲。
FATAL/CRITICAL = 重大的庶艾,危險的? ? ? ? ? ? ? ? ?
【如果你不能及時發(fā)現(xiàn)和處理,你就可以走人的信息擎勘,一般1-2小時內發(fā)現(xiàn)咱揍,4小時內處理】
ERROR = 錯誤
【會導致程序出現(xiàn)閃退或者是無法正常使用的信息,一般2-4小時內發(fā)現(xiàn)棚饵,8小時內處理】
WARNING = 警告
【一般是內存不夠煤裙,或者鏈接異常等問題,一般6-8小時內發(fā)現(xiàn)蟹地,24小時內處理】
INFO = 信息
【運行里的信息顯示积暖,每次運行的記錄】
DEBUG = 調試
【主要用于開發(fā)人員使用】
NOTSET = 沒有設置
【如果你想掩耳盜鈴,且留個大坑怪与。但一般沒人會這樣做夺刑,損人不利己】
日志信息與格式
日志信息除了本身程序的報錯日志,同時也有程序開發(fā)者的報錯提示分别,日志內容和日志級別是開發(fā)人員明確指定的遍愿,對于其他的字段信息,只需要考慮是否顯示在日志中就可以了耘斩。無論你怎么提示沼填,最重要的是必須能夠讓看的人直到問題是什么,在哪出現(xiàn)的括授,以及發(fā)生的時間坞笙。沒有這些信息,就不算一個日志該有的內容格式
實現(xiàn)模塊
Python 自身提供的一個模塊:logging
logging 模塊
該模塊定義的函數(shù)和類為應用程序和庫的開發(fā)實現(xiàn)了一個靈活的事件日志系統(tǒng)
它是Python的標準庫模塊荚虚,由標準庫提供日志記錄API的好處是薛夜,所有的Python模塊都可使用這個日志記錄功能
logging的日志級別
它有自己的默認定義的日志等級,也允許開發(fā)人員自定義其他日志等級版述,但一般不推薦梯澜。因為可能會導致日志級別混亂
DEBUG:最詳細的日志信息。適用場景是 問題診斷
INFO:詳細程度僅此于DEBUG渴析,通常只記錄關鍵節(jié)點信息晚伙,用于確認運行流程順序是否按預期進行
WARNING:當某些不希望的事情發(fā)生時的記錄吮龄,此時程序還能運行,比如:磁盤空間不足咆疗,或者連接訪問資源失敗
ERROR:由于嚴重問題導致功能不能正常運行時的記錄
FATAL/CRITICAL:系統(tǒng)即將完全崩潰
一般開發(fā)時使用DEBUG或INFO漓帚,上線或部署生產時使用WARNING或ERROR或CRITICAL級別,減輕I/O壓力和提高錯誤日志的抓取效率民傻,一般級別在配置文件中指定
logging的使用方式
loggers:提供應用程序代碼直接使用的接口
handlers:用于將日志記錄發(fā)送到指定的目的位置
filters:提供更加細致的日志過濾功能胰默,用于決定哪些日志記錄被輸出
formatters:控制日志信息的最終輸出格式
# 設置日志的記錄等級
????logging.basicConfig(level=logging.DEBUG)
# 調試debug級
# 創(chuàng)建日志記錄器,指明日志保存的路徑漓踢、每個日志文件的最大大小牵署、保存的日志文件個數(shù)上限
????file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024*1024*100, backupCount=10)
# 創(chuàng)建日志記錄的格式 日志等級 輸入日志信息的文件名 行數(shù) 日志信息
????formatter = logging.Formatter('%(levelname)s %(filename)s:%(lineno)d %(message)s')
# 為剛創(chuàng)建的日志記錄器設置日志記錄格式
????file_log_handler.setFormatter(formatter)
# 為全局的日志工具對象(flask app使用的)添加日志記錄器
????logging.getLogger().addHandler(file_log_handler)
使用logging的模塊級別的函數(shù)記錄日志
????importlogging
????logging.debug("This is a debug log.")logging.info("This is a info log.")
????logging.warning("This is a warning log.")logging.error("This is a error log.")
????logging.critical("This is a critical log.")
????# 或者是這樣寫
????logging.log(logging.DEBUG,"This is a debug log.")
????logging.log(logging.INFO,"This is a info log.")
????logging.log(logging.WARNING,"This is a warning log.")
????logging.log(logging.ERROR,"This is a error log.")
????logging.log(logging.CRITICAL,"This is a critical log.")
其實說到底,日志就像是一個人的身體檢查報告喧半,能夠幫助一個從來都不認識的你的醫(yī)生奴迅,在最簡短的時間內知道你的問題在哪,然后他能夠根據(jù)你的情況去提供最有效的解決辦法挺据。當前運維的小哥哥們都是這樣做的取具,至于醫(yī)生是不是。扁耐。暇检。你猜吧
好了,本次的logging介紹完婉称,其實它的作用不是想的那么大块仆,但就是不可缺失。所以請每個開發(fā)的工作者們王暗,寫好自己的日志記錄吧悔据,方便別人的同時,也是在提高自己俗壹。當然如果對于本人文章哪里有錯誤或者不足科汗,請留言,我會及時更改的绷雏。