導航:首頁 > 編程語言 > python輸出log

python輸出log

發布時間:2023-07-04 20:36:16

Ⅰ 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畫對數圖

1、用python畫出log1.5(x),log(2x),log(3x)

[python]view plain

Ⅲ 如何使用批處理執行python腳本,並把python腳本的控制台日誌輸出到一個log文件中

1, 用絕對路徑試試:D:\logs\log.txt;
2, 最後的exit去掉試試,反正最後一行執行完也會自然退出。
3, 另寫一個簡單的python測試腳本,裡面只有一行 print 'Hello World', 然後用上述批處理執行一下看看log對不對。

Ⅳ 怎麼把python運行結果保存到log

通過管道輸出到另一個程序里去,另外一個程序同時列印並輸出到out.log。

用自己的myprint代替所有的print語句。這樣你可以同時輸出到屏幕與文件了。

通過logging。這個模塊支持多個listener,可以同時輸出到屏幕與文件以及網路。

Ⅳ 多進程環境python logging列印日誌混亂問題

解決辦法如下:

多麼痛的領悟,滑腔困擾了這么久的問題其實就是一個參數配置錯了。
fileMode:表示日誌山讓侍文件的打開方式。w-直接寫,使用這個配置當系統重啟的時候日誌會清空,一個進程打開後其他進程是無法使用的;a-尾部逗吵追加,大家都可以打開往文件結尾進行追加寫入。

本人主語言是java,轉到python後日誌這塊踩了幾個坑。再說說另外一個坑,就是異常堆棧的列印問題,在java中logger是可以使用error直接列印出來的。在python中error跟其他日誌記錄方法沒太大差別,是無法列印異常堆棧的,列印堆棧請使用 logger.exception("異常說明", e) 。

Ⅵ 【Python】'{{:{}}}{{:>{}}}'.format(30, 40)的輸出為什麼是'{:30}{:>40}'而不是'{{:30}}{{:>40}}'

控制符號作為文本內容時需要額外的格式與控制符區分。

如果要在輸出【{】這個符號,那麼,就在格式串中使用【{{】來表示。【}}】也是類似的。


同樣的道理,在常規字元串中,【】用於表示它與後一個符號是特殊字元的表義符號,如【 】,那麼【】就是常規字元串中的控制符,要在字元串中輸出【】本身,就得按規則使用【\】:

s_exp = 'log\input.log'

print(s_exp) # 輸出:loginput.log


在其它編程語言中,也有類似的規則,最常見的就是字元串的界符。如果一種編程語言只支持一種字元串界符,那它就必需提供一種規則用來在字元串中輸出相應在的界符。例如在mssql中字元串使用【'】 為界符,如果要在字元串包含單引號,那麼,就得使用連續兩個單引號來表示:

declare @data varchar(max) = 'what''s your name?'

閱讀全文

與python輸出log相關的資料

熱點內容
區域網如何用ftp伺服器配置 瀏覽:70
程序員慣性思考模式 瀏覽:439
如何在個稅app上查身份證號 瀏覽:6
電視家app安裝在電視上怎麼安 瀏覽:889
怎麼將pdf格式轉化為圖片格式 瀏覽:637
伺服器拔掉raid卡怎麼裝系統 瀏覽:232
區域對稱加密演算法 瀏覽:245
數字轉漢字php 瀏覽:733
安卓源碼硬體驅動 瀏覽:208
痰證pdf 瀏覽:814
電腦怎麼把word文檔轉pdf 瀏覽:867
程序員那麼可愛有孩子了嗎 瀏覽:480
安卓文字折疊怎麼使用 瀏覽:885
創造一個app如何掙錢 瀏覽:801
php55vc11 瀏覽:642
抖音如何關閉蘋果app充值 瀏覽:332
python多個文件調用 瀏覽:792
java演算法和數據結構 瀏覽:465
糖豆視頻的文件夾 瀏覽:654
php的頭部文件一般在哪個文件里 瀏覽:560