全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

python日志模塊 logging怎么用?

更新時(shí)間:2020-08-03 來(lái)源:黑馬程序員 瀏覽量:

· 日志對(duì)于Web應(yīng)用的作用就像飛機(jī)的黑匣子,用于記錄Web應(yīng)用的運(yùn)行狀態(tài),方便開(kāi)發(fā)者快速定位錯(cuò)誤并進(jìn)行修復(fù)。

· python中內(nèi)置的 logging模塊功能全面,web應(yīng)用集成日志功能基本都是基于該模塊。

1. 基本使用

· logging模塊提供了默認(rèn)日志,只需要通過(guò)basicConfig()函數(shù)就可以快速配置

· logging模塊提供了多個(gè)日志級(jí)別: 致命錯(cuò)誤CRITICAL /錯(cuò)誤ERROR /警告WARNING /信息INFO /調(diào)試DEBUG,方便開(kāi)發(fā)者提供需求進(jìn)行日志過(guò)濾。

代碼示例

import logging

def basic_log():
    """使用默認(rèn)日志
    缺點(diǎn): 文件輸出/控制臺(tái)輸出 二選一"""
 
    format = "%(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s"
 
    # 設(shè)置默認(rèn)日志
    logging.basicConfig(level="DEBUG", format=format, filename='basic.log')
 
    # 使用默認(rèn)日志
    logging.debug('this is a debug message')
    logging.info('this is a info message')
    logging.warning('this is a warn message')
    logging.error('this is a error message')
 
 
if __name__ == '__main__':
    basic_log()

· 注意點(diǎn):

默認(rèn)日志的缺點(diǎn)是文件輸出/控制臺(tái)輸出只能二選一

2. 自定義日志器

· 自定義日志器可以添加多個(gè)輸出處理器, 將日志同時(shí)輸出到 控制臺(tái) & 文件 & 郵件 等環(huán)境中

· 自定義日志器的基本使用步驟:

(1)創(chuàng)建/獲取自定義日志器

(2)創(chuàng)建輸出處理器

(3)日志器添加處理器

(4)使用自定義日志

import logging
from logging.handlers import RotatingFileHandler
 
 
def custem_log():
    """使用自定義日志  可以同時(shí)在控制臺(tái)和文件輸出"""
 
    # 創(chuàng)建/獲取自定義的日志器
    mylogger = logging.getLogger('mylogger')
    # 設(shè)置全局級(jí)別
    mylogger.setLevel('DEBUG')
 
    # 創(chuàng)建控制臺(tái)處理器
    console_handler = logging.StreamHandler()
 
    # 給處理器設(shè)置輸出格式
    console_formatter = logging.Formatter(fmt='%(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s')
    console_handler.setFormatter(console_formatter)
 
    # 日志器添加處理器
    mylogger.addHandler(console_handler)
 
    # 創(chuàng)建文件處理器
    file_handler = RotatingFileHandler(filename='mylogger.log', maxBytes=100 * 1024 * 1024, backupCount=10)  # 轉(zhuǎn)存文件處理器  當(dāng)達(dá)到限定的文件大小時(shí), 可以將日志轉(zhuǎn)存到其他文件中
 
    # 給處理器設(shè)置輸出格式
    file_formatter = logging.Formatter(fmt='[%(asctime)s] %(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s')
    file_handler.setFormatter(file_formatter)
    # 單獨(dú)設(shè)置文件處理器的日志級(jí)別
    file_handler.setLevel('WARN')
 
    # 日志器添加處理器
    mylogger.addHandler(file_handler)
 
    # 使用自定義日志
    mylogger.debug('this is a debug message')
    mylogger.info('this is a info message')
    mylogger.warning('this is a warn message')
    mylogger.error('this is a error message')
 
 
if __name__ == '__main__':
    custem_log()


3. 郵件發(fā)送日志

· 項(xiàng)目上線后,開(kāi)發(fā)者往往不會(huì)持續(xù)關(guān)注所有的日志信息,為了更快的發(fā)現(xiàn)和解決錯(cuò)誤,比較常規(guī)的一種方式是將一般或者高級(jí)別的錯(cuò)誤寫(xiě)入電子郵件并發(fā)送給開(kāi)發(fā)者。

· logging模塊可以配置一個(gè)SMTPHandler郵件輸出處理器來(lái)實(shí)現(xiàn)該需求

代碼示例

import logging
from logging.handlers import SMTPHandler
 
 
def mail_log():
    """使用郵件輸出日志, 將日志以郵件形式發(fā)送"""
 
    # 創(chuàng)建/獲取自定義的日志器
    mylogger = logging.getLogger('mylogger')
    # 設(shè)置全局級(jí)別
    mylogger.setLevel('DEBUG')
 
    # 創(chuàng)建郵件處理器
    mail_handler = SMTPHandler(
        mailhost=('smtp.163.com', 25),  # SMTP稱(chēng)為簡(jiǎn)單郵件傳輸協(xié)議, 163提供了支持該協(xié)議的郵件服務(wù)器, 端口為25
        fromaddr='czbk_zzz@163.com',  # 發(fā)件人地址
        toaddrs=['xxx@itcast.cn', 'xx@qq.com'],  # 收件人地址
        subject='Log Error',
        credentials=('czbk_zzz@163.com', 'HZLLPADWYUWUVDIQ')  # 發(fā)件人的郵件地址 和 發(fā)件人的授權(quán)密碼
    )
 
    # 給處理器設(shè)置輸出格式
    mail_formatter = logging.Formatter(fmt='%(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s')
    mail_handler.setFormatter(mail_formatter)
    # 設(shè)置郵件處理器的日志級(jí)別
    mail_handler.setLevel('ERROR')
 
    # 日志器添加處理器
    mylogger.addHandler(mail_handler)
 
    # 使用自定義日志
    mylogger.debug('this is a debug message')
    mylogger.info('this is a info message')
    mylogger.warning('this is a warn message')
    mylogger.error('this is a error message')
 
 
if __name__ == '__main__':
    mail_log()

發(fā)送郵件是耗時(shí)操作,可以考慮使用celery執(zhí)行異步任務(wù),提高響應(yīng)速度。


猜你喜歡

Python垃圾回收機(jī)制是什么? 

python反射以及應(yīng)用場(chǎng)景 

傳智播客Python培訓(xùn)課程

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!