本文目錄一覽:
- 1、python如何查看報錯日誌
- 2、在 python 項目中如何記錄日誌
- 3、python中更優雅的記錄日誌
- 4、Loguru:Python 日誌終極解決方案
- 5、Python日誌—Python日誌模塊logging介紹
- 6、linux python 日誌在哪
python如何查看報錯日誌
test.py的39行,有個對象是個None?意思是你肯定有什麼對象沒有初始化就用了吧。
這個日誌提示的信息意思最後一行NoneType,你還是查查你的test.py調用的方法是不是不對
你可以在IDLE下單步執行看看,環境變量是不是有些沒有按照你想像的進行。
在 python 項目中如何記錄日誌
寫本文的目的是我在寫 python 項目的時候需要記錄日誌,我忘記怎麼處理了,每次都需要去網上查一遍, 好記性不如爛筆頭 , 這裡把查閱的內容記錄下來,方便以後查找。
python 項目中記錄日誌,可以使用 logging 模塊,logging 模塊定義的函數和類為應用程序和庫的開發實現了一個靈活的事件日誌系統。logging 模塊是Python的一個標準庫模塊,由標準庫模塊提供日誌記錄API的關鍵好處是所有Python模塊都可以使用這個日誌記錄功能。所以,你的應用日誌可以將你自己的日誌信息與來自第三方模塊的信息整合起來。
在 __init__.py 文件中做如下配置:
控制台輸出日誌如下:
參考文檔
python中更優雅的記錄日誌
在以往我們使用日誌,更多的是使用 python 自帶的 logging 模塊,它可以設置錯誤等級、輸出方式等。
但使用方式相對比較複雜,想要更好的使用需要如 log4net 一樣單獨配置,這在 python 中感覺不是很優雅。
下面介紹一個 python 庫: loguru 。 guru 是印度語中大師的意思, loguru 直譯就是「日誌大師」。
如圖 logging 一樣, loguru 也有定義日誌等級。不同的日誌等級,輸出效果也不一樣(默認的等級由低到高是 DEBUG 、 INFO 、 WARNING 、 ERROR 、 CRITICAL ,也可以自己使用 level 函數定義)。
類似 logging 中的 logger.addHandler ,loguru統一使用 add 函數來管理格式、文件輸出、過濾等操作,它提供了許多參數來實現 logger.addHandler 中的配置更加簡單方便。
其中 sink 是最重要的參數,可以傳入不同的數據類型。傳入文件路徑、文件句柄、 sys.stderr 、甚至 logging 模塊的 Handler 如 FileHandler 、 StreamHandler 等,這樣就可以快速實現自定義的 Handler 配置。
通過給 remove 方法傳遞 add 方法返回的對象, 可以刪除 add 方法添加的 sink ,這裡的 remove 並不是刪除 test2.log 文件,而是停止向該文件輸出日誌,需要需要繼續記錄日誌則需要重新 add 日誌文件。
用 rotation 、 retention 、 compression 進行日誌窗口、更新、壓縮管理。
支持控制台輸出添加顏色, 除了基礎色, loguru 甚至允許16進制、RGB格式的顏色值和加粗、下劃線等樣式。
使用裝飾器 @logger.catch 可以和 logging 一樣使用 logger.exception 函數來記錄異常信息。
使用 exception 方法輸出的異常信息包含堆棧信息和當前變量的值,方便問題定位。
使用 serialize 可以將日誌轉換為 JSON 格式, enqueue 可以保證多線程、多進程安全。
修改時間格式。
Loguru:Python 日誌終極解決方案
日誌的作用非常重要,日誌可以記錄用戶的操作、程序的異常,還可以為數據分析提供依據,日誌的存在意義就是為了能夠在程序在運行過程中記錄錯誤,方便維護和調試,能夠快速定位出錯的地方,減少維護成本。每個程序員都應該知道,不是為了記錄日誌而記錄日誌,日誌也不是隨意記的。要實現能夠只通過日誌文件還原整個程序執行的過程,達到能透明地看到程序里執行情況,每個線程、每個過程到底執行到哪的目的。日誌就像飛機的黑匣子一樣,應當能夠復原異常的整個現場乃至細節!
最常見的是把輸出函數 print() 當作日誌記錄的方式,直接打印各種提示信息,常見於個人練習項目里,通常是懶得單獨配置日誌,而且項目太小不需要日誌信息,不需要上線,不需要持續運行,完整的項目不推薦直接打印日誌信息,現實中也幾乎沒有人這麼做。
我們可以在不少小項目裏面看到作者自己寫了一個日誌模板,通常利用 print() 或者 sys.stdout 稍微封裝一下即可實現簡單的日誌輸出,這裡的 sys.stdout 是 Python 中的標準輸出流, print() 函數是對 sys.stdout 的高級封裝,當我們在 Python 中打印對象調用 print(obj) 時候,事實上是調用了 sys.stdout.write(obj+’\n’) , print() 將內容打印到了控制台,然後追加了一個換行符 \n 。
自寫日誌模板適合比較小的項目,可以按照自己的喜好編寫模板,不需要太多複雜配置,方便快捷,但是這種記錄日誌的方式並不是很規範,有可能你自己覺得閱讀體驗不錯,但是別人在接觸你的項目的時候往往需要花費一定的時間去學習日誌的邏輯、格式、輸出方式等,比較大的項目同樣不推薦這種方法。
一個簡單的自寫日誌模板舉例:
日誌模板 log.py:
調用日誌模塊:
日誌輸出:
在一個完整的項目中,大多數人都會引入專門的日誌記錄庫,而 Python 自帶的標準庫 logging 就是專門為日誌記錄而生的,logging 模塊定義的函數和類為應用程序和庫的開發實現了一個靈活的事件日誌系統。由標準庫模塊提供日誌記錄 API 的關鍵好處是所有 Python 模塊都可以使用這個日誌記錄功能。所以,你的應用日誌可以將你自己的日誌信息與來自第三方模塊的信息整合起來。
logging 模塊雖然強大,但是其配置也是比較繁瑣的,在大型項目中通常需要單獨初始化日誌、配置日誌格式等等,K哥在日常使用中通常都會對 logging 做如下的封裝寫法,使日誌可以按天保存,保留15天的日誌,可以配置是否輸出到控制台和文件,如下所示:
輸出日誌:
它在控制台中是這樣的:
當然,如果你不需要很複雜的功能,希望簡潔一點,僅僅需要在控制台輸出一下日誌的話,也可以只進行簡單的配置:
對於 logging 模塊,即便是簡單的使用,也需要自己定義格式,這裡介紹一個更加優雅、高效、簡潔的第三方模塊:loguru,官方的介紹是:Loguru is a library which aims to bring enjoyable logging in Python. Loguru 旨在為 Python 帶來愉快的日誌記錄。這裡引用官方的一個 GIF 來快速演示其功能:
Loguru 僅支持 Python 3.5 及以上的版本,使用 pip 安裝即可:
Loguru 的主要概念是只有一個:logger
控制台輸出:
可以看到不需要手動設置,Loguru 會提前配置一些基礎信息,自動輸出時間、日誌級別、模塊名、行號等信息,而且根據等級的不同,還自動設置了不同的顏色,方便觀察,真正做到了開箱即用!
如果想自定義日誌級別,自定義日誌格式,保存日誌到文件該怎麼辦?與 logging 模塊不同,不需要 Handler,不需要 Formatter,只需要一個 add() 函數就可以了,例如我們想把日誌儲存到文件:
我們不需要像 logging 模塊一樣再聲明一個 FileHandler 了,就一行 add() 語句搞定,運行之後會發現目錄下 test.log 裏面同樣出現了剛剛控制台輸出的 debug 信息。
與 add() 語句相反, remove() 語句可以刪除我們添加的配置:
此時控制台會輸出兩條 debug 信息:
而 test.log 日誌文件裏面只有一條 debug 信息,原因就在於我們在第二條 debug 語句之前使用了 remove() 語句。
Loguru 對輸出到文件的配置有非常強大的支持,比如支持輸出到多個文件,分級別分別輸出,過大創建新文件,過久自動刪除等等。 下面我們來詳細看一下 add() 語句的詳細參數:
基本語法:
基本參數釋義:
當且僅當 sink 是協程函數時,以下參數適用:
當且僅當 sink 是文件路徑時,以下參數適用:
這麼多參數可以見識到 add() 函數的強大之處,僅僅一個函數就能實現 logging 模塊的諸多功能,接下來介紹幾個比較常用的方法。
add() 函數的 rotation 參數,可以實現按照固定時間創建新的日誌文件,比如設置每天 0 點新創建一個 log 文件:
設置超過 500 MB 新創建一個 log 文件:
設置每隔一個周新創建一個 log 文件:
add() 函數的 retention 參數,可以設置日誌的最長保留時間,比如設置日誌文件最長保留 15 天:
設置日誌文件最多保留 10 個:
也可以是一個 datetime.timedelta 對象,比如設置日誌文件最多保留 5 個小時:
add() 函數的 compression 參數,可以配置日誌文件的壓縮格式,這樣可以更加節省存儲空間,比如設置使用 zip 文件格式保存:
其格式支持: gz 、 bz2 、 xz 、 lzma 、 tar 、 tar.gz 、 tar.bz2 、 tar.xz
Loguru 在輸出 log 的時候還提供了非常友好的字符串格式化功能,相當於 str.format() :
輸出:
在 Loguru 里可以直接使用它提供的裝飾器就可以直接進行異常捕獲,而且得到的日誌是無比詳細的:
日誌輸出:
在控制台的輸出是這樣的:
相比 Logging,Loguru 無論是在配置方面、日誌輸出樣式還是異常追蹤,都遠優於 Logging,使用 Loguru 無疑能提升開發人員效率。本文僅介紹了一些常用的方法,想要詳細了解可參考 Loguru 官方文檔 或關注 Loguru GitHub 。
Python日誌—Python日誌模塊logging介紹
從事與軟件相關工作的人,應該都聽過「日誌」一詞。
日誌就是跟蹤軟件運行時事件的方法,為了能夠在程序運行過程中記錄錯誤。
通過日誌記錄程序的運行,方便我們查詢信息,以便追蹤問題、進行維護和調試、還是數據分析。
並且各編程語言都形成了各自的日誌體系和相應的框架。
日誌的作用總結:
首先我們要樹立一個觀點,那就是「不是為了記錄日誌而記錄日誌,日誌也不是隨意記的」。要實現能夠只通過日誌文件還原整個程序執行的過程,達到能透明地看到程序里執行情況,每個線程每個過程到底執行結果的目的。日誌就像飛機的黑匣子一樣,應當能夠復原異常的整個現場乃至細節。
在項目中,日誌這個功能非常重要,我們要重視起來。
在Python中,使用logging模塊來進行日誌的處理。
logging是Python的內置模塊,主要用於將日誌信息進行格式化內容輸出,可將格式化內容輸出到文件,也可輸出到屏幕。
我們在開發過程中,常用print()函數來進行調試,但是在實際應用的部署時,我們要將日誌信息輸出到文件中,方便後續查找以及備份。
在我們使用日誌管理時,我們也可以將日誌格式化成Json對象轉存到ELK中方便圖形化查看及管理。
logging模塊將日誌系統從高向低依次定義了四個類,分別是logger(日誌器)、handler(處理器)、filter(過濾器)和formatter(格式器)。其中由日誌器生成的實例將接管原本日誌記錄函數logging.log的功能。
說明:
我們先來思考下下面的兩個問題:
在軟件開發階段或部署開發環境時,為了儘可能詳細的查看應用程序的運行狀態來保證上線後的穩定性,我們可能需要把該應用程序所有的運行日誌全部記錄下來進行分析,這是非常耗費機器性能的。
當應用程序正式發佈或在生產環境部署應用程序時,我們通常只需要記錄應用程序的異常信息、錯誤信息等,這樣既可以減小服務器的I/O壓力,也可以避免我們在排查故障時被淹沒在日誌的海洋里。
那麼怎樣才能在不改動應用程序代碼的情況下,根據事件的重要性或者稱之為等級,實現在不同的環境中,記錄不同詳細程度的日誌呢?
這就是日誌等級的作用了,我們通過配置文件指定我們需要的日誌等級就可以了。
說明:
總結:
開發應用程序時或部署開發環境時,可以使用DEBUG或INFO級別的日誌獲取儘可能詳細的日誌信息,可以方便進行開發或部署調試。 應用上線或部署生產環境時,應用使用WARNING或ERROR或CRITICAL級別的日誌,來降低機器的I/O壓力和提高獲取錯誤日誌信息的效率。 日誌級別的指定通常都是在應用程序的配置文件中進行指定的。 不同的應用程序所定義的日誌等級會有所差別,根據實際需求來決定。
linux python 日誌在哪
現在有test.py程序要後台部署, 裏面有輸出內容
使用命令:
nohup python -u test.py test.log 21
最後的表示後台運行
2 輸出錯誤信息到提示符窗口
1 表示輸出信息到提示符窗口, 1前面的注意添加, 否則還會創建一個名為1的文件
最後會把日誌文件輸出到test.log文件
查看
tail -f test.log如果要實時查看日誌文件使用命令
cat test.log查看全部輸出使用命令
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/258507.html