最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中的logging模塊的簡單應(yīng)用和高級使用

 更新時間:2023年04月21日 09:59:17   作者:菜鳥小超  
在?Python?中,可以使用內(nèi)置的?logging?模塊來記錄應(yīng)用程序的信息,logging?模塊還提供了一些高級功能,如日志回溯、日志輪換、日志緩沖等,需要的朋友可以參考下

簡單使用

在 Python 中,可以使用內(nèi)置的 logging 模塊來記錄應(yīng)用程序的信息。最簡單的用法是使用 basicConfig() 函數(shù)配置 logging 模塊,然后使用 getLogger() 方法創(chuàng)建一個 Logger 對象,用于記錄信息。下面是一個簡單的例子:

import logging

# 配置 logging
logging.basicConfig(level=logging.DEBUG)

# 創(chuàng)建 logger 對象
logger = logging.getLogger()

# 記錄信息
logger.debug('這是一條調(diào)試信息')
logger.info('這是一條普通信息')
logger.warning('這是一條警告信息')
logger.error('這是一條錯誤信息')
logger.critical('這是一條嚴(yán)重錯誤信息')

在上面的例子中,我們使用 basicConfig() 函數(shù)設(shè)置日志級別為 DEBUG(最詳細(xì)的日志信息),然后使用 getLogger() 方法創(chuàng)建了一個 Logger 對象。接下來,我們使用 Logger 對象的不同方法記錄不同級別的信息。日志級別的優(yōu)先級從低到高依次是 DEBUG、INFO、WARNING、ERROR、CRITICAL。

日志格式

logging 模塊支持自定義日志格式,可以使用 format 參數(shù)來指定日志格式。日志格式可以包括時間、日志級別、日志信息等。下面是一個自定義日志格式的例子:

import logging

# 配置 logging
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)s %(message)s')

# 創(chuàng)建 logger 對象
logger = logging.getLogger()

# 記錄信息
logger.debug('這是一條調(diào)試信息')
logger.info('這是一條普通信息')
logger.warning('這是一條警告信息')
logger.error('這是一條錯誤信息')
logger.critical('這是一條嚴(yán)重錯誤信息')

在上面的例子中,我們使用 format 參數(shù)指定了日志格式,其中 %(asctime)s 表示時間,%(levelname)s 表示日志級別,%(message)s 表示日志信息。

輸出到文件

logging 模塊支持將日志輸出到文件中,可以使用 filename 和 filemode 參數(shù)來指定輸出文件名和打開模式。下面是一個將日志輸出到文件中的例子:

import logging

# 配置 logging
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)s %(message)s',
                    filename='app.log',
                    filemode='w')

# 創(chuàng)建 logger 對象
logger = logging.getLogger()

# 記錄信息
logger.debug('這是一條調(diào)試信息')
logger.info('這是一條普通信息')
logger.warning('這是一條警告信息')
logger.error('這是一條錯誤信息')
logger.critical('這是一條嚴(yán)重錯誤信息')

在上面的例子中,我們使用 filename 參數(shù)指定輸出文件名為 app.log,使用 filemode 參數(shù)指定打開模式為 w(覆蓋寫入)。

處理程序(Handler)

logging 模塊提供了處理程序(Handler)的概念,用于處理日志記錄的輸出。默認(rèn)情況下,日志記錄會輸出到控制臺。我們可以添加一個或多個處理程序來指定不同的日志輸出方式。例如,可以將日志輸出到文件、網(wǎng)絡(luò)、數(shù)據(jù)庫等。下面是一個將日志輸出到文件和控制臺的例子:

import logging

# 創(chuàng)建 logger 對象
logger = logging.getLogger()

# 創(chuàng)建控制臺處理程序并設(shè)置日志級別
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)

# 創(chuàng)建文件處理程序并設(shè)置日志級別
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG)

# 創(chuàng)建日志格式器
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')

# 設(shè)置處理程序的日志格式器
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# 添加處理程序到 logger 對象
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 記錄信息
logger.debug('這是一條調(diào)試信息')
logger.info('這是一條普通信息')
logger.warning('這是一條警告信息')
logger.error('這是一條錯誤信息')
logger.critical('這是一條嚴(yán)重錯誤信息')

在上面的例子中,我們創(chuàng)建了一個 Logger 對象,并添加了兩個處理程序:一個控制臺處理程序和一個文件處理程序。我們還創(chuàng)建了一個日志格式器,并將其設(shè)置為處理程序的格式器。然后,我們將處理程序添加到 Logger 對象中,最后記錄了一些信息。由于控制臺處理程序的日志級別設(shè)置為 INFO,因此調(diào)試信息不會輸出到控制臺。

過濾器(Filter)

logging 模塊還提供了過濾器(Filter)的概念,用于對日志記錄進(jìn)行過濾??梢允褂眠^濾器來控制哪些日志記錄應(yīng)該被處理,哪些不應(yīng)該被處理。下面是一個使用過濾器的例子:

import logging

# 創(chuàng)建 logger 對象
logger = logging.getLogger()

# 創(chuàng)建控制臺處理程序并設(shè)置日志級別
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)

# 創(chuàng)建過濾器并設(shè)置過濾條件
class CustomFilter(logging.Filter):
    def filter(self, record):
        return record.msg.startswith('警告')

filter = CustomFilter()

# 設(shè)置處理程序的過濾器
console_handler.addFilter(filter)

# 創(chuàng)建日志格式器
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')

# 設(shè)置處理程序的日志格式器
console_handler.setFormatter(formatter)

# 添加處理程序到 logger 對象
logger.addHandler(console_handler)

# 記錄信息
logger.debug('這是一條調(diào)試信息')
logger.info('這是一條普通信息')
logger.warning('警告:這是一條警告信息')
logger.warning('這是又一條警告信息')
logger.error('這是一條錯誤信息')
logger.critical('這是一條嚴(yán)重錯誤信息')

在上面的例子中,我們創(chuàng)建了一個 Logger 對象,并添加了一個控制臺處理程序。我們還創(chuàng)建了一個過濾器,并將其設(shè)置為控制臺處理程序的過濾器。過濾器的 filter()方法用于指定哪些記錄應(yīng)該被處理,它返回 True 或 False表示是否處理該記錄。在這個例子中,我們創(chuàng)建了一個自定義過濾器 CustomFilter,用于只處理以“警告”開頭的日志記錄。

高級使用

除了上述介紹的基本用法外,logging 模塊還提供了一些高級功能,如日志回溯、日志輪換、日志緩沖等。

日志回溯

logging 模塊支持記錄回溯信息,可以使用 exc_info 參數(shù)來記錄當(dāng)前異常的回溯信息。

在 Python 中,當(dāng)程序發(fā)生異常時,解釋器會自動輸出異常信息和回溯信息。異常信息通常包含異常類型和異常消息,回溯信息包含了程序執(zhí)行時的堆棧信息,即函數(shù)調(diào)用棧的跟蹤信息。回溯信息可以幫助開發(fā)人員定位程序錯誤的根源。

日志回溯是使用 logging 模塊記錄程序發(fā)生的異常信息和回溯信息??梢允褂?Logger 對象的 error()、exception() 或 critical() 方法來記錄異常信息和回溯信息。這些方法會自動記錄當(dāng)前異常的類型、消息和回溯信息,無需額外的代碼

下面是一個記錄回溯信息的例子:

import logging

# 配置 logging
logging.basicConfig(level=logging.DEBUG)

# 創(chuàng)建 logger 對象
logger = logging.getLogger()

# 記錄信息和回溯信息
try:
    1/0
except Exception as e:
    logger.error('發(fā)生異常', exc_info=True)

在上面的例子中,我們使用 exc_info=True 參數(shù)記錄了當(dāng)前異常的回溯信息。當(dāng)發(fā)生異常時,日志記錄將包括異常信息和回溯信息。

2023-04-19 15:47:36,688 ERROR 發(fā)生異常
Traceback (most recent call last):
  File "<ipython-input-1-728869f0c30f>", line 7, in <module>
    1/0
ZeroDivisionError: division by zero

日志輪換

logging 模塊支持日志輪換功能,可以將日志按時間或大小輪換到不同的文件中。

日志輪換(Log Rotation)是指在日志文件大小達(dá)到一定值或一定時間間隔后,自動將當(dāng)前日志文件備份并創(chuàng)建一個新的日志文件,以便管理和維護(hù)。日志輪換可以避免日志文件過大、影響系統(tǒng)性能和管理不便等問題。

在 Python 的 logging 模塊中,可以使用 logging.handlers 模塊中的 RotatingFileHandler 和 TimedRotatingFileHandler 類來實現(xiàn)日志輪換功能。其中,RotatingFileHandler 類是按文件大小輪換日志文件,TimedRotatingFileHandler 類是按時間輪換日志文件。

下面是一個按時間輪換日志的例子:

import logging
from logging.handlers import TimedRotatingFileHandler

# 創(chuàng)建 logger 對象
logger = logging.getLogger()

# 創(chuàng)建按時間輪換的文件處理程序
handler = TimedRotatingFileHandler('app.log', when='midnight', backupCount=7)

# 創(chuàng)建日志格式器
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')

# 設(shè)置處理程序的日志格式器
handler.setFormatter(formatter)

# 添加處理程序到 logger 對象
logger.addHandler(handler)

# 記錄信息
logger.debug('這是一條調(diào)試信息')
logger.info('這是一條普通信息')
logger.warning('這是一條警告信息')
logger.error('這是一條錯誤信息')
logger.critical('這是一條嚴(yán)重錯誤信息')

在上面的例子中,我們創(chuàng)建了一個按時間輪換的文件處理程序,它會在每天的午夜時分割日志文件。when 參數(shù)可以指定分割的時間點(diǎn),backupCount 參數(shù)可以指定保留的日志文件個數(shù)。在使用 TimedRotatingFileHandler 類型的日志處理器對象時,會根據(jù)指定的時間間隔創(chuàng)建新的日志文件,并在文件名中添加時間戳后綴。

具體來說,當(dāng)日志文件發(fā)生輪換時,會在原來的日志文件名后面添加一個時間戳后綴,例如:

  • 原始日志文件名為 app.log,當(dāng)輪換發(fā)生時,會將其備份為 app.log.2023-04-20,其中 2023-04-20 為輪換時的日期。
  • 下次輪換發(fā)生時,會將原始日志文件名為 app.log 的文件備份為 app.log.2023-04-21,同時將 app.log.2023-04-20 刪除,以保持日志文件的數(shù)量在備份數(shù)量之內(nèi)。

因此,使用 TimedRotatingFileHandler 類型的日志處理器對象時,每個日志文件名中都會包含時間戳后綴,以便區(qū)分不同的日志文件。

日志緩沖

在使用 logging 模塊記錄日志時,默認(rèn)情況下,每條日志信息都會立即寫入到磁盤文件中。這樣會頻繁地訪問磁盤,導(dǎo)致程序性能下降。

為了避免頻繁訪問磁盤,logging 模塊提供了緩沖機(jī)制。當(dāng)使用緩沖機(jī)制時,多條日志信息會先存儲在內(nèi)存中,直到滿足一定條件后再將它們寫入磁盤文件。通過這種方式可以減少頻繁訪問磁盤的次數(shù),提高程序的性能和效率。

在 logging 模塊中,可以使用 logging.handlers 模塊中的 BufferingHandler 類來實現(xiàn)日志緩沖機(jī)制。BufferingHandler 類中的 bufferSize 參數(shù)指定了緩沖區(qū)的大小。當(dāng)日志信息達(dá)到緩沖區(qū)的容量時,就會將緩沖區(qū)中的信息寫入磁盤文件。

下面是一個使用日志緩沖機(jī)制的例子:

import logging
from logging.handlers import BufferingHandler

# 配置 logging
logging.basicConfig(level=logging.DEBUG)

# 創(chuàng)建 logger 對象
logger = logging.getLogger()

# 創(chuàng)建帶緩沖的文件處理程序
handler = BufferingHandler(capacity=5)

# 將處理程序添加到 logger 對象
logger.addHandler(handler)

# 記錄信息
for i in range(10):
    logger.debug('這是第 %s 條調(diào)試信息', i+1)

在上面的例子中,我們使用 BufferingHandler 類型的日志處理器對象創(chuàng)建了一個帶緩沖的文件處理程序,并設(shè)置緩沖區(qū)的容量為 5。然后使用 logger 對象記錄了 10 條日志信息。

由于緩沖區(qū)容量為 5,當(dāng)記錄了 5 條日志信息后,就會將它們一起寫入磁盤文件。因此,第 1 條到第 5 條日志信息會被存儲在內(nèi)存緩沖區(qū)中,而第 6 條到第 10 條日志信息會被存儲在內(nèi)存緩沖區(qū)中,并在最后一次寫入時一起寫入到磁盤文件中。

通過這種方式,我們可以減少頻繁訪問磁盤的次數(shù),提高程序的性能和效率。需要注意的是,設(shè)置過大的緩沖區(qū)容量可能會占用過多的內(nèi)存,從而導(dǎo)致程序崩潰。因此,需要根據(jù)實際需求和系統(tǒng)資源進(jìn)行權(quán)衡和設(shè)置。

總結(jié)

logging 模塊是 Python 標(biāo)準(zhǔn)庫中一個功能強(qiáng)大的日志記錄工具。它可以記錄應(yīng)用程序的各種信息,并支持自定義日志格式、日志輸出方式、日志級別、日志過濾器、日志回溯、日志輪換、日志緩沖等功能。使用 logging 模塊可以幫助開發(fā)人員更好地調(diào)試和分析應(yīng)用程序,提高開發(fā)效率和程序質(zhì)量。

到此這篇關(guān)于python中的logging模塊的簡單應(yīng)用和高級使用的文章就介紹到這了,更多相關(guān)python的logging模塊高級應(yīng)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python?pandas庫讀取excel/csv中指定行或列數(shù)據(jù)

    python?pandas庫讀取excel/csv中指定行或列數(shù)據(jù)

    通過閱讀表格,可以發(fā)現(xiàn)Pandas中提供了非常豐富的數(shù)據(jù)讀寫方法,下面這篇文章主要給大家介紹了關(guān)于python利用pandas庫讀取excel/csv中指定行或列數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • 手把手教你將Flask應(yīng)用封裝成Docker服務(wù)的實現(xiàn)

    手把手教你將Flask應(yīng)用封裝成Docker服務(wù)的實現(xiàn)

    這篇文章主要介紹了手把手教你將Flask應(yīng)用封裝成Docker服務(wù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • python 移除字符串尾部的數(shù)字方法

    python 移除字符串尾部的數(shù)字方法

    今天小編就為大家分享一篇python 移除字符串尾部的數(shù)字方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python超詳細(xì)分步解析隨機(jī)漫步

    Python超詳細(xì)分步解析隨機(jī)漫步

    隨機(jī)游走(random walk)也稱隨機(jī)漫步,隨機(jī)行走等是指基于過去的表現(xiàn),無法預(yù)測將來的發(fā)展步驟和方向。核心是指任何無規(guī)則行走者所帶的守恒量都各自對應(yīng)著一個擴(kuò)散運(yùn)輸定律,接近布朗運(yùn)動,現(xiàn)階段主要應(yīng)用于互聯(lián)網(wǎng)鏈接分析及金融股票市場中
    2022-03-03
  • Python使用MongoDB運(yùn)算符進(jìn)行數(shù)據(jù)查詢詳解

    Python使用MongoDB運(yùn)算符進(jìn)行數(shù)據(jù)查詢詳解

    MongoDB 是一個非關(guān)系型數(shù)據(jù)庫,具有靈活的數(shù)據(jù)模型和豐富的查詢功能,本文將介紹在 Python 中使用 MongoDB 運(yùn)算符進(jìn)行數(shù)據(jù)查詢的常用方法,需要的可以參考下
    2024-04-04
  • Python圖像處理之圖像量化處理詳解

    Python圖像處理之圖像量化處理詳解

    這篇文章將介紹圖像量化處理,即將圖像像素點(diǎn)對應(yīng)亮度的連續(xù)變化區(qū)間轉(zhuǎn)換為單個特定值的過程。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-02-02
  • Python的函數(shù)的一些高階特性

    Python的函數(shù)的一些高階特性

    這篇文章主要介紹了Python的函數(shù)的一些高階特性,包括函數(shù)名用作變量等一些小技巧,需要的朋友可以參考下
    2015-04-04
  • FP-growth算法發(fā)現(xiàn)頻繁項集——發(fā)現(xiàn)頻繁項集

    FP-growth算法發(fā)現(xiàn)頻繁項集——發(fā)現(xiàn)頻繁項集

    常見的挖掘頻繁項集算法有兩類,一類是Apriori算法,另一類是FP-growth。Apriori通過不斷的構(gòu)造候選集、篩選候選集挖掘出頻繁項集,需要多次掃描原始數(shù)據(jù),當(dāng)原始數(shù)據(jù)較大時,磁盤I/O次數(shù)太多,效率比較低下
    2021-06-06
  • 用Python實現(xiàn)命令行鬧鐘腳本實例

    用Python實現(xiàn)命令行鬧鐘腳本實例

    今天我們講一下用Python寫的一個小腳本。這是一個可以在命令行運(yùn)行的鬧鐘腳本,對于日常大家工作很實用,有需要的朋友們可以參考借鑒。
    2016-09-09
  • 利用Python實現(xiàn)自制文件搜索小工具

    利用Python實現(xiàn)自制文件搜索小工具

    當(dāng)自己電腦文件很多還有點(diǎn)亂,不記得自己文件放哪里的時候,用電腦自帶的搜索文件,這個等待時間可慢了。所以我們不如自己用python做一個搜索工具!犄角旮旯的文件都能一秒鐘搜索出來的那種
    2022-09-09

最新評論

鄱阳县| 木兰县| 祁连县| 十堰市| 湟源县| 石城县| 喀喇| 海盐县| 平安县| 扎兰屯市| 塔河县| 洞头县| 东方市| 阿拉善左旗| 大兴区| 胶南市| 米易县| 福州市| 聂拉木县| 南皮县| 德令哈市| 河间市| 延庆县| 荔浦县| 措勤县| 张掖市| 漳浦县| 定南县| 西乌珠穆沁旗| 天长市| 大荔县| 吉首市| 含山县| 黄陵县| 孝感市| 承德市| 翁源县| 隆尧县| 宁远县| 镇坪县| 孟州市|