国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
【Python】自動(dòng)化編程之基礎(chǔ)庫(kù) logging 庫(kù)

在編寫應(yīng)用程序時(shí),我們通常需要對(duì)應(yīng)用程序的運(yùn)行過程進(jìn)行記錄,以便在程序出現(xiàn)問題時(shí)進(jìn)行排查和調(diào)試。Python 中的 logging 模塊提供了一種靈活且功能強(qiáng)大的記錄方式,可以將記錄輸出到控制臺(tái)、文件、網(wǎng)絡(luò)等各種位置。

logging 模塊包括四個(gè)主要組件:記錄器(Logger)、處理器(Handler)、格式化器(Formatter)和過濾器(Filter)。其中,記錄器是記錄日志信息的主要組件,處理器是用于將記錄器產(chǎn)生的日志信息發(fā)送到不同的位置,格式化器是用于將日志信息格式化為指定的樣式,而過濾器則是用于過濾掉不需要記錄的日志信息。

logging 基本用法

在使用 logging 模塊時(shí),通常需要按照以下步驟進(jìn)行操作:

創(chuàng)建記錄器
使用 logging.getLogger(name) 方法創(chuàng)建一個(gè)記錄器,其中 name 是記錄器的名稱,可以根據(jù)需要自行命名。如果不指定名稱,則使用根記錄器。

import logginglogger = logging.getLogger('my_logger')創(chuàng)建處理器使用 logging.StreamHandler()、logging.FileHandler()、logging.SocketHandler() 等方法創(chuàng)建一個(gè)處理器,用于將日志信息發(fā)送到控制臺(tái)、文件、網(wǎng)絡(luò)等不同位置。pythonCopy codeimport logginglogger = logging.getLogger('my_logger')# 創(chuàng)建一個(gè)控制臺(tái)處理器console_handler = logging.StreamHandler()

創(chuàng)建格式化器
使用 logging.Formatter() 方法創(chuàng)建一個(gè)格式化器,用于將日志信息格式化為指定的樣式。

import logginglogger = logging.getLogger('my_logger')# 創(chuàng)建一個(gè)格式化器formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

綁定處理器和格式化器
使用處理器的 setFormatter() 方法將格式化器綁定到處理器上。

import logginglogger = logging.getLogger('my_logger')# 創(chuàng)建一個(gè)格式化器formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 創(chuàng)建一個(gè)控制臺(tái)處理器console_handler = logging.StreamHandler()console_handler.setFormatter(formatter)

綁定處理器和記錄器
使用記錄器的 addHandler() 方法將處理器綁定到記錄器上。

import logginglogger = logging.getLogger('my_logger')# 創(chuàng)建一個(gè)格式化器formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 創(chuàng)建一個(gè)控制臺(tái)處理器console_handler = logging.StreamHandler()console_handler.setFormatter(formatter)# 綁定處理器和記錄器logger.addHandler(console_handler)

記錄日志信息
使用記錄器的 debug()、info()、warning()、error()、critical() 等方法記錄日志信息。

import logginglogger = logging.getLogger('my_logger')# 創(chuàng)建一個(gè)格式化器formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 創(chuàng)建一個(gè)控制臺(tái)處理器console_handler = logging.StreamHandler()console_handler.setFormatter(formatter)# 綁定處理器和記錄器logger.addHandler(console_handler)# 記錄日志信息logger.debug('This is a debug message')logger.info('This is an info message')logger.warning('This is a warning message')logger.error('This is an error message')logger.critical('This is a critical message')

上述代碼中,首先創(chuàng)建了一個(gè)記錄器 my_logger,然后創(chuàng)建了一個(gè)格式化器 % (asctime) s -% (name) s -% (levelname) s -% (message) s,表示記錄日志信息的時(shí)間、記錄器的名稱、日志級(jí)別和日志內(nèi)容。然后創(chuàng)建了一個(gè)控制臺(tái)處理器 console_handler,并將格式化器綁定到處理器上。最后將處理器綁定到記錄器上,并使用記錄器的不同方法記錄了不同級(jí)別的日志信息。

在默認(rèn)情況下,記錄器將所有的日志信息發(fā)送到其直接父級(jí)別,直到根記錄器。如果需要將日志信息發(fā)送到其他位置,可以使用不同的處理器,例如 FileHandler、RotatingFileHandler、SMTPHandler 等。還可以通過 setLevel() 方法設(shè)置記錄器的日志級(jí)別,以便過濾掉不需要記錄的日志信息。此外,還可以使用過濾器來(lái)進(jìn)一步過濾日志信息,只記錄滿足特定條件的日志信息。

logging 高級(jí)用法

除了基本的記錄日志信息的功能之外,logging 庫(kù)還提供了許多高級(jí)用法,如下:
日志輪換
logging.handlers 模塊提供了多種處理器,其中 RotatingFileHandler 和 TimedRotatingFileHandler 可以實(shí)現(xiàn)日志輪換的功能。

RotatingFileHandler 根據(jù)指定的文件大小,循環(huán)記錄日志信息,如果文件大小超過了指定大小,則將當(dāng)前日志文件重命名為備份文件,并創(chuàng)建一個(gè)新的日志文件繼續(xù)記錄日志信息。使用 maxBytes 參數(shù)設(shè)置日志文件的最大大小。

TimedRotatingFileHandler 根據(jù)指定的時(shí)間,循環(huán)記錄日志信息,可以設(shè)置循環(huán)周期(例如每天、每小時(shí)等)。使用 when 參數(shù)設(shè)置循環(huán)周期,支持 S、M、H、D、W、midnight 等值,分別表示每秒、每分鐘、每小時(shí)、每天、每周、每天午夜等。

import loggingimport logging.handlerslogger = logging.getLogger('my_logger')# 創(chuàng)建一個(gè)格式化器formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 創(chuàng)建一個(gè)輪換文件處理器file_handler = logging.handlers.RotatingFileHandler('my.log', maxBytes=1024, backupCount=3)file_handler.setFormatter(formatter)# 綁定處理器和記錄器logger.addHandler(file_handler)# 記錄日志信息logger.info('This is a test message')

上述代碼中,創(chuàng)建了一個(gè) RotatingFileHandler 處理器,指定日志文件名為 my.log,最大大小為 1024 字節(jié),備份文件數(shù)量為 3。然后將處理器綁定到記錄器上,并使用記錄器記錄了一條日志信息。

日志郵件通知
使用 SMTPHandler 處理器可以實(shí)現(xiàn)將日志信息通過電子郵件發(fā)送給指定的收件人。

import loggingimport logging.handlerslogger = logging.getLogger('my_logger')# 創(chuàng)建一個(gè)格式化器formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 創(chuàng)建一個(gè) SMTP 處理器mail_handler = logging.handlers.SMTPHandler(mailhost=('smtp.gmail.com', 587), fromaddr='sender@gmail.com', toaddrs='receiver@gmail.com', subject='Test Logging')mail_handler.setFormatter(formatter)# 綁定處理器和記錄器logger.addHandler(mail_handler)# 記錄日志信息logger.error('This is an error message')

上述代碼中,創(chuàng)建了一個(gè) SMTPHandler 處理器,指定了 SMTP 服務(wù)器地址、發(fā)件人地址、收件人地址和郵件主題。然后將處理器綁定到記錄器上,并使用記錄器記錄了一條錯(cuò)誤級(jí)別的日志信息。當(dāng)記錄器記錄了錯(cuò)誤級(jí)別的日志信息時(shí),SMTPHandler 處理器會(huì)自動(dòng)將郵件發(fā)送給指定的收件人。

日志歸檔
logging.handlers 模塊還提供了 RotatingFileHandler 和 TimedRotatingFileHandler 的派生類,可以將歷史日志信息歸檔到不同的文件中。
例如,RotatingFileHandler 的派生類
ConcurrentRotatingFileHandler 可以將歷史日志信息歸檔到不同的文件中,歸檔的文件名可以包含時(shí)間信息和序號(hào)信息。使用 filename 參數(shù)設(shè)置歸檔文件名的格式,例如:

import loggingimport logging.handlerslogger = logging.getLogger('my_logger')# 創(chuàng)建一個(gè)格式化器formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 創(chuàng)建一個(gè)并發(fā)輪換文件處理器file_handler = logging.handlers.ConcurrentRotatingFileHandler('my.log', maxBytes=1024, backupCount=3, filename='my_%Y%m%d_%H%M%S.log')file_handler.setFormatter(formatter)# 綁定處理器和記錄器logger.addHandler(file_handler)# 記錄日志信息logger.info('This is a test message')

上述代碼中,創(chuàng)建了一個(gè)
ConcurrentRotatingFileHandler 處理器,指定日志文件名為 my.log,最大大小為 1024 字節(jié),備份文件數(shù)量為 3,歸檔文件名格式為 my_年月日_時(shí)分秒.log。然后將處理器綁定到記錄器上,并使用記錄器記錄了一條日志信息。當(dāng)日志文件大小超過指定大小時(shí),會(huì)自動(dòng)將當(dāng)前日志文件歸檔到一個(gè)新的文件中。

自定義日志處理器
logging.handlers 模塊提供了多種日志處理器,但有時(shí)候需要自定義特定的日志處理器來(lái)滿足特定的需求??梢酝ㄟ^繼承 logging.Handler 類并重寫其方法來(lái)實(shí)現(xiàn)自定義日志處理器。

例如,下面的代碼定義了一個(gè) MyHandler 類,可以將日志信息輸出到標(biāo)準(zhǔn)輸出,并在每條日志信息前添加指定的前綴字符串。

import loggingclass MyHandler(logging.Handler): def __init__(self, prefix=''): super().__init__() self.prefix = prefix def emit(self, record): message = self.format(record) message = f'{self.prefix} {message}' print(message)

使用 MyHandler 處理器和 logging 模塊中的其他組件一樣,例如:

logger = logging.getLogger('my_logger')# 創(chuàng)建一個(gè) MyHandler 處理器handler = MyHandler(prefix='[INFO]')handler.setLevel(logging.INFO)# 創(chuàng)建一個(gè)格式化器formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')handler.setFormatter(formatter)# 綁定處理器和記錄器logger.addHandler(handler)# 記錄日志信息logger.info('This is a test message')

上述代碼中,創(chuàng)建了一個(gè) MyHandler 處理器,指定前綴字符串為 [INFO]。然后將處理器綁定到記錄器上,并使用記錄器記錄了一條日志信息。當(dāng)記錄器記錄日志信息時(shí),MyHandler 處理器會(huì)將信息輸出到標(biāo)準(zhǔn)輸出,并在每條信息前添加前綴字符串。

自定義日志過濾器
logging.Filter 類可以用于定義日志過濾器,根據(jù)需要過濾掉一些不需要記錄的日志信息??梢酝ㄟ^繼承 logging.Filter 類實(shí)現(xiàn)自定義日志過濾器。
例如,下面的代碼定義了一個(gè) MyFilter 類,可以過濾掉日志信息中包含指定字符串的記錄。

import loggingclass MyFilter(logging.Filter): def __init__(self, exclude_str=''): super().__init__() self.exclude_str = exclude_str def filter(self, record): message = record.getMessage() return self.exclude_str not in message

使用 MyFilter 過濾器和 logging 模塊中的其他組件一樣,例如:

logger = logging.getLogger('my_logger')# 創(chuàng)建一個(gè)過濾器filter = MyFilter(exclude_str='warning')filter.setLevel(logging.WARNING)# 創(chuàng)建一個(gè)處理器handler = logging.StreamHandler()handler.setLevel(logging.DEBUG)# 創(chuàng)建一個(gè)格式化器formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')handler.setFormatter(formatter)# 綁定過濾器、處理器和記錄器handler.addFilter(filter)logger.addHandler(handler)# 記錄日志信息logger.info('This is a test message')logger.warning('This is a warning message')

上述代碼中,創(chuàng)建了一個(gè) MyFilter 過濾器,指定排除包含 warning 字符串的日志信息。然后創(chuàng)建了一個(gè)處理器和格式化器,并將過濾器、處理器和記錄器綁定在一起。當(dāng)記錄器記錄日志信息時(shí),MyFilter 過濾器會(huì)過濾掉包含 warning 字符串的日志信息,并將其它日志信息輸出到標(biāo)準(zhǔn)輸出。

日志模塊的配置文件
logging 模塊可以使用配置文件來(lái)配置日志記錄器、處理器、格式化器和過濾器等組件的參數(shù),這樣可以方便地在多個(gè)應(yīng)用程序中重復(fù)使用配置。

例如,下面是一個(gè) logging 模塊的配置文件示例 logging.conf:

[loggers]keys=root[handlers]keys=consoleHandler,fileHandler[formatters]keys=simpleFormatter[logger_root]level=DEBUGhandlers=consoleHandler,fileHandler[handler_consoleHandler]class=StreamHandlerlevel=DEBUGformatter=simpleFormatterargs=(sys.stdout,)[handler_fileHandler]class=FileHandlerlevel=DEBUGformatter=simpleFormatterargs=('my.log', 'a')[formatter_simpleFormatter]format=%(asctime)s - %(name)s - %(levelname)s - %(message)sdatefmt=%Y-%m-%d %H:%M:%S

上述配置文件定義了一個(gè)記錄器 root,它有兩個(gè)處理器 consoleHandler 和 fileHandler,使用的格式化器為 simpleFormatter。consoleHandler 處理器將日志信息輸出到標(biāo)準(zhǔn)輸出,fileHandler 處理器將日志信息輸出到文件 my.log 中,文件模式為追加模式。

在 Python 代碼中使用配置文件可以使用 logging.config 模塊中的 fileConfig 函數(shù),例如:

import logging.configlogging.config.fileConfig('logging.conf')logger = logging.getLogger('root')logger.info('This is a test message')

上述代碼中,通過調(diào)用 fileConfig 函數(shù)加載配置文件 logging.conf,然后獲取 logger 對(duì)象并使用它記錄日志信息。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
一篇文章教你如何用 Python 記錄日志
第10章:python自動(dòng)化——logging日志庫(kù)
為什么pycharm輸出的日志全部是紅色!
java中Logger.getLogger(Test.class)
python 日志模塊 logging 詳解
使用python的logging模塊
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服