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

python日志模塊 logging怎么用?

更新時間:2020-08-03 來源:黑馬程序員 瀏覽量:

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

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

1. 基本使用

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

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

代碼示例

import logging

def basic_log():
    """使用默認(rèn)日志
    缺點: 文件輸出/控制臺輸出 二選一"""
 
    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()

· 注意點:

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

2. 自定義日志器

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

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

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

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

(3)日志器添加處理器

(4)使用自定義日志

import logging
from logging.handlers import RotatingFileHandler
 
 
def custem_log():
    """使用自定義日志  可以同時在控制臺和文件輸出"""
 
    # 創(chuàng)建/獲取自定義的日志器
    mylogger = logging.getLogger('mylogger')
    # 設(shè)置全局級別
    mylogger.setLevel('DEBUG')
 
    # 創(chuàng)建控制臺處理器
    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á)到限定的文件大小時, 可以將日志轉(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)
    # 單獨設(shè)置文件處理器的日志級別
    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ā)送日志

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

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

代碼示例

import logging
from logging.handlers import SMTPHandler
 
 
def mail_log():
    """使用郵件輸出日志, 將日志以郵件形式發(fā)送"""
 
    # 創(chuàng)建/獲取自定義的日志器
    mylogger = logging.getLogger('mylogger')
    # 設(shè)置全局級別
    mylogger.setLevel('DEBUG')
 
    # 創(chuàng)建郵件處理器
    mail_handler = SMTPHandler(
        mailhost=('smtp.163.com', 25),  # SMTP稱為簡單郵件傳輸協(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è)置郵件處理器的日志級別
    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ā)送郵件是耗時操作,可以考慮使用celery執(zhí)行異步任務(wù),提高響應(yīng)速度。


猜你喜歡

Python垃圾回收機制是什么? 

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

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

分享到:
在線咨詢 我要報名
和我們在線交談!