python處理logger日志

前言:

在實際的項目開發(fā)過程中,為了準確的定位出bug,需要對錯誤進行日志記錄,這里簡要記錄一下使用python的logging模塊實現(xiàn)日志的記錄。

logger的常見使用

1.日志等級
2.實際開發(fā)中的日志記錄
3.日志輸出到屏幕
4.日志輸入到文件
5.完整代碼實例

日志的等級:

1.等級排序:
?? debug < info < warn < error < fatal
2.各等級的含義:
??1.debug: 級別最低,用戶開發(fā)過程中的調(diào)試
??2.info:打印程序運行是的正常的信息,用于替代print輸出
??3.warn: 打印警告信息,不影響程序的運行
??4.error: 程序運行出錯,可以修復(fù),常用在except異常捕獲之后
??5.fatal:非常嚴重,無法修復(fù),程序繼續(xù)運行的話后果非常嚴重
3.使用注意事項:
?? 設(shè)置了日志等級后,調(diào)用比等級低的日志記錄函數(shù)則不會輸出

實際開發(fā)中的日志記錄
1.在開發(fā)階段,便于調(diào)試,會將日志信息輸出到控制臺
2.項目上線后,便于后期的錯誤定位,會將日志記錄到log文件
日志輸出到屏幕
    logging.StreamHandler()
日志輸入到文件
logging.handlers.TimedRotatingFileHandler(filename, when, backupCount, encoding)
各參數(shù)含義:
  1.filename:log文件名
  2.when:間隔的時間單位
        S:秒
        M:分
        H:小時
        D:天、
        W:每星期(interval==0時代表星期一)
        midnight: 每天凌晨
  3.backupCount:備份文件的個數(shù),若超過該值,就會自動刪除
  4.encoding:編碼格式,一般為:utf-8

完整代碼實例
# coding:utf-8
import os
import logging
from logging import handlers

# 日志根路徑
LOG_ROOT = "I:/"


def get_logger(log_filename, level=logging.DEBUG, when='midnight', back_count=0):
    """
    :brief  日志記錄
    :param log_filename: 日志名稱
    :param level: 日志等級
    :param when: 間隔時間:
        S:秒
        M:分
        H:小時
        D:天
        W:每星期(interval==0時代表星期一)
        midnight: 每天凌晨
    :param back_count: 備份文件的個數(shù),若超過該值,就會自動刪除
    :return: logger
    """
    logger = logging.getLogger(log_filename)
    logger.setLevel(level)
    log_path = os.path.join(LOG_ROOT, "logs")
    if not os.path.exists(log_path):
        os.mkdir(log_path)
    log_file_path = os.path.join(log_path, log_filename)
    # log輸出格式
    formatter = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
    # 輸出到控制臺
    ch = logging.StreamHandler()
    ch.setLevel(level)
    # 輸出到文件
    fh = logging.handlers.TimedRotatingFileHandler(
        filename=log_file_path,
        when=when,
        backupCount=back_count,
        encoding='utf-8')
    fh.setLevel(level)
    # 設(shè)置日志輸出格式
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
    # 添加到logger對象里
    logger.addHandler(fh)
    logger.addHandler(ch)
    return logger


if __name__ == "__main__":
    logger = get_logger("my.log")
    logger.debug("debug test")
    logger.info("info test")
    logger.warn("warn test")
    logger.error("error test")

喜歡關(guān)注點個贊!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容