python中的日誌級別,日誌級別的使用

本文目錄一覽:

python程序中logging怎麼用

簡單將日誌打印到屏幕:

[python] view plain copy

import logging

logging.debug(‘debug message’)

logging.info(‘info message’)

logging.warning(‘warning message’)

logging.error(‘error message’)

logging.critical(‘critical message’)

輸出:

WARNING:root:warning message

ERROR:root:error message

CRITICAL:root:critical message

可見,默認情況下Python的

logging模塊將日誌打印到了標準輸出中,且只顯示了大於等於WARNING級別的日誌,這說明默認的日誌級別設置為WARNING(日誌級別等級

CRITICAL ERROR WARNING INFO DEBUG

NOTSET),默認的日誌格式為日誌級別:Logger名稱:用戶輸出消息。

靈活配置日誌級別,日誌格式,輸出位置

[python] view plain copy

import logging

logging.basicConfig(level=logging.DEBUG,

format=’%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s’,

datefmt=’%a, %d %b %Y %H:%M:%S’,

filename=’/tmp/test.log’,

filemode=’w’)

logging.debug(‘debug message’)

logging.info(‘info message’)

logging.warning(‘warning message’)

logging.error(‘error message’)

logging.critical(‘critical message’)

查看輸出:

cat /tmp/test.log

Mon, 05 May 2014 16:29:53 test_logging.py[line:9] DEBUG debug message

Mon, 05 May 2014 16:29:53 test_logging.py[line:10] INFO info message

Mon, 05 May 2014 16:29:53 test_logging.py[line:11] WARNING warning message

Mon, 05 May 2014 16:29:53 test_logging.py[line:12] ERROR error message

Mon, 05 May 2014 16:29:53 test_logging.py[line:13] CRITICAL critical message

可見在logging.basicConfig()函數中可通過具體參數來更改logging模塊默認行為,可用參數有

filename:用指定的文件名創建FiledHandler(後邊會具體講解handler的概念),這樣日誌會被存儲在指定的文件中。

filemode:文件打開方式,在指定了filename時使用這個參數,默認值為「a」還可指定為「w」。

format:指定handler使用的日誌顯示格式。

datefmt:指定日期時間格式。

level:設置rootlogger(後邊會講解具體概念)的日誌級別

stream:用指定的stream創建StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者文件,默認為sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。

format參數中可能用到的格式化串:

%(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日誌—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 自帶的 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 可以保證多線程、多進程安全。

修改時間格式。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/228701.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-10 12:07
下一篇 2024-12-10 12:07

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論