傳智播客旗下品牌:|||||

全國咨詢/投訴熱線:400-618-4000

Python編程加入日志的方法

更新時間:2020年08月03日14時12分 來源:傳智播客 瀏覽次數:

· 日志對于Web應用的作用就像飛機的黑匣子,用于記錄Web應用的運行狀態,方便開發者快速定位錯誤并進行修復。

· python中內置的 logging模塊功能全面,web應用集成日志功能基本都是基于該模塊。

1. 基本使用

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

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

代碼示例

import logging

def basic_log():
    """使用默認日志
    缺點: 文件輸出/控制臺輸出 二選一"""
 
    format = "%(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s"
 
    # 設置默認日志
    logging.basicConfig(level="DEBUG", format=format, filename='basic.log')
 
    # 使用默認日志
    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()

· 注意點:

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

2. 自定義日志器

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

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

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

(2)創建輸出處理器

(3)日志器添加處理器

(4)使用自定義日志

import logging
from logging.handlers import RotatingFileHandler
 
 
def custem_log():
    """使用自定義日志  可以同時在控制臺和文件輸出"""
 
    # 創建/獲取自定義的日志器
    mylogger = logging.getLogger('mylogger')
    # 設置全局級別
    mylogger.setLevel('DEBUG')
 
    # 創建控制臺處理器
    console_handler = logging.StreamHandler()
 
    # 給處理器設置輸出格式
    console_formatter = logging.Formatter(fmt='%(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s')
    console_handler.setFormatter(console_formatter)
 
    # 日志器添加處理器
    mylogger.addHandler(console_handler)
 
    # 創建文件處理器
    file_handler = RotatingFileHandler(filename='mylogger.log', maxBytes=100 * 1024 * 1024, backupCount=10)  # 轉存文件處理器  當達到限定的文件大小時, 可以將日志轉存到其他文件中
 
    # 給處理器設置輸出格式
    file_formatter = logging.Formatter(fmt='[%(asctime)s] %(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s')
    file_handler.setFormatter(file_formatter)
    # 單獨設置文件處理器的日志級別
    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. 郵件發送日志

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

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

代碼示例

import logging
from logging.handlers import SMTPHandler
 
 
def mail_log():
    """使用郵件輸出日志, 將日志以郵件形式發送"""
 
    # 創建/獲取自定義的日志器
    mylogger = logging.getLogger('mylogger')
    # 設置全局級別
    mylogger.setLevel('DEBUG')
 
    # 創建郵件處理器
    mail_handler = SMTPHandler(
        mailhost=('smtp.163.com', 25),  # SMTP稱為簡單郵件傳輸協議, 163提供了支持該協議的郵件服務器, 端口為25
        fromaddr='czbk_zzz@163.com',  # 發件人地址
        toaddrs=['xxx@itcast.cn', 'xx@qq.com'],  # 收件人地址
        subject='Log Error',
        credentials=('czbk_zzz@163.com', 'HZLLPADWYUWUVDIQ')  # 發件人的郵件地址 和 發件人的授權密碼
    )
 
    # 給處理器設置輸出格式
    mail_formatter = logging.Formatter(fmt='%(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s')
    mail_handler.setFormatter(mail_formatter)
    # 設置郵件處理器的日志級別
    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()

發送郵件是耗時操作,可以考慮使用celery執行異步任務,提高響應速度。


猜你喜歡

Python垃圾回收機制是什么? 

python反射以及應用場景