python處理logger日志

前言:

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

logger的常見使用

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

日志的等級:

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

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

完整代碼實(shí)例
# 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: 間隔時(shí)間:
        S:秒
        M:分
        H:小時(shí)
        D:天
        W:每星期(interval==0時(shí)代表星期一)
        midnight: 每天凌晨
    :param back_count: 備份文件的個(gè)數(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)注點(diǎn)個(gè)贊!

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

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