當前位置:首頁 » 編程語言 » python日誌格式化

python日誌格式化

發布時間: 2022-11-21 14:37:47

python logging 使用記錄:設置INFO級別不生效,格式化,輸出到文件

沒有輸出INFO的日誌級別。默認是WARN級別的日誌,這里沒有輸出WARN說明沒有設置成功。

這時可以正常輸出INFO了

此時第二個logger也被設置了INFO級別了,查看源碼

可以看到名字為None時返回的是一個root對象,這也是為什麼第二個logger也被修改的原因。

常見的輸出到控制台和文件

默認只是輸出了message,這樣子還不如直接用print()函數了。所以還需要格式化一下:

設置格式化要用到logging.Handler

輸出效果:

[圖片上傳失敗...(image-6690c5-1606835078864)]

formatter參數

Ⅱ 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語言format用法

Format為CString類的一個成員函數,它通過格式操作使任意類型的數據轉換成一個字元串Format裡面可以寫普通的字元串,比如「mynameis」,但有些格式指令字元具有特殊意義,比如「%6s」。

Format(<表達式>[,<格式字元串>])其中,<表達式>:要格式化的數值、日期或字元串表達式。<格式字元串>:指定表達式的值的輸出格式。格式字元有三類:數值格式、日期格式和字元串格式。格式字元要加引號。

方法如下:

1、首先按下「Win+R」組合鍵,打開運行窗口。

Ⅳ python列印日誌,extra是什麼意思

extra是用戶自定義的dict. 這些key/value在格式化的時候可以直接引用。

extra可以用來傳遞額外的日誌信息,尤其是上下文信息。


例如:

FORMAT='%(asctime)-15s%(clientip)s%(user)-8s%(message)s'
logging.basicConfig(format=FORMAT)
d={'clientip':'192.168.0.1','user':'fbloggs'}
logger=logging.getLogger('tcpserver')
logger.warning('Protocolproblem:%s','connectionreset',extra=d)

這里除了protocol錯誤描述外,還附加了客戶IP和用戶名信息。

如果配置了一些非文本格式的handler,結構化的數據會更容易存儲和查詢。

例如,Sentry的logging handler允許用戶用extra.data來傳遞任意信息,並自動記錄到web界面。

logger.error('Therewassomecrazyerror',exc_info=True,extra={
'culprit':'my.view.name',
'fingerprint':[...],

'data':{
#
'username':request.user.username,
}
})

Ⅳ 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壓力和提高獲取錯誤日誌信息的效率。 日誌級別的指定通常都是在應用程序的配置文件中進行指定的。 不同的應用程序所定義的日誌等級會有所差別,根據實際需求來決定。

Ⅵ python 格式化日期

python格式化日期的方法:可以利用time.asctime(time.local(time.time()))函數來格式化日期。如果我們要獲取當前日期,可以利用時間函數time()來獲取。

Ⅶ python 格式化日期到毫秒

可以參考下面的代碼:

一、代碼一:

importdatetime

print(datetime.datetime.now().microsecond*1e-3)

二、代碼二:

importdatetime

now=datetime.datetime.now()

printnow.strftime("%Y%m%d%H%M%S")

(7)python日誌格式化擴展閱讀:

python函數

hasattr(obj,name)查看一個obj的namespace中是否有name

getattr(obj,name)得到一個obj的namespace中的一個name

setattr(obj,name,value)為一個obj的namespace中的一個name指向vale這個object

delattr(obj,name)從obj的namespace中刪除一個name

Ⅷ python 日誌配置文件中format=%(asctime)s %(name)-32s[line:%(lineno)d] %(levelname)-8s %(message)s

減號是右對齊的意思
32是若不足32個字元,則用空格補齊;若超過了32個字元,原樣輸出。

若-8s沒變化,說明實際內容超過了8個字元。

Ⅸ Python 中的常見 格式化符號

Python 認識格式化輸出 中的 格式化符號

在前面的文章里我們早早就接觸過Python中的輸出的函數prinnt(),它的作用顧名思義就是輸出,也就是程序輸出內容給用戶看。現在這篇文章不再說這么簡單的print()輸出,而是格式化輸出。格式化輸出含義:就是程序輸出一種帶格式的數據給用戶。

輸出:prinnt()

利用 print函數 返回結果是一個數字30,但是這個返回的數據30別人並不知道是30歲還是30年還是附有其他含義的一個數字。假如這里有一個需求:輸出『今年我的年齡是30歲』,這樣的話那麼這個需求里的30是不是就是取到我們上面的age = 30變數里存儲的數據呢,這種操作就是格式化輸出.

格式化輸出

格式化輸出含義:所謂的格式化輸出就是按照一定的格式輸出內容。

下面通過兩點來講解格式化輸出。

1.1 格式化符號

這里是Python當中一些內置好的格式符號,大家不用全部背誦下來,只要著重學習前三個常用的就可以了,其他的等用到再把這篇筆記拿出來查一下就ok。

%s:是格式化字元串的,%s中的s代表str字元串類型的縮寫,這樣方便記憶。

%d:代表有符號對的十進制整數,有符號呢表示整數前面有正號或負號,有符號表示正負號都可以有。%u表示無符號的十進制整數,也就是只包含正整數,在與沒用的時候我們一般用%d更全面一些。

%f:數據類型浮點數float縮寫的前面字母f

Ⅹ python 日誌文件轉換某個欄位格式,再保存

fr=open('xx.log','r')
fw=open('xx_1.log','w')
forlineinfr.readlines():
arr=line.strip().split('')
//dosomethingwitharr[1]
newline=''.join(arr)
fw.write(newline+' ')
fr.close()
fw.close()

上面這種讀一行寫一行的方式不太適合在同一個文件里讀然後又寫到原文件里去。

如果想寫到原文件,最好全部處理完,然後再一股腦寫到原文件里:

fr=open('xx.log','r')
newlines=[]
forlineinfr.readlines():
arr=line.strip().split('')
//dosomethingwitharr[1]
newlines.append(''.join(arr)+' ')
fr.close()

fw=open('xx.log','w')
fw.writelines(newlines)
fw.close()
熱點內容
安卓網路編程怎麼用 發布:2025-01-16 03:04:45 瀏覽:899
湖南it伺服器怎麼樣 發布:2025-01-16 03:01:01 瀏覽:248
圖中兩種配置哪個好 發布:2025-01-16 02:59:28 瀏覽:582
如何解開密保密碼 發布:2025-01-16 02:57:44 瀏覽:23
中國銀行查詢密碼是什麼 發布:2025-01-16 02:33:20 瀏覽:794
堅果pro錄音文件夾 發布:2025-01-16 02:31:46 瀏覽:942
支付寶的登錄密碼忘記了如何改 發布:2025-01-16 02:30:30 瀏覽:224
解壓作業泥 發布:2025-01-16 02:28:02 瀏覽:810
我的世界rpg伺服器空島 發布:2025-01-16 02:26:49 瀏覽:93
ps腳本函數 發布:2025-01-16 02:15:28 瀏覽:484