Python3自定義日誌類教程

1、說明

Python3的logging功能是比較豐富的支持不一樣層次的日誌輸出,但或是咱們想在日誌前輸出時間、或是咱們想要將日誌輸入到文件,咱們仍是想要自定義日誌類。html

以前本身也嘗試寫過但感受文檔太亂看不懂怎麼寫,今天有人拿個半成品來問爲何代碼報錯,在其基礎上改造了一下。python

 

2、實現代碼

import os
import datetime
import logging

class LogConfig:
    def __init__(self,log_type="console"):
        # 指定日誌輸出到控制檯時的初始化
        if log_type == "console":
            logging.basicConfig(level=logging.INFO,
                                format='%(asctime)s %(levelname)s %(message)s',
                                datefmt='%Y-%m-%d %H:%M:%S',
                                )
        # 指定日誌輸出到文件的初始化
        elif log_type == "file":
            # 建立存放日誌的目錄
            if not os.path.exists('./log'):
                os.mkdir('./log')

            # 操做系統自己不容許文件名包含:等特殊字符,因此這裏也不要用,否則賦給filename時會報錯
            nowTime = datetime.datetime.now().strftime('%Y-%m-%d')

            file_name = f'./log/{nowTime}.log'
            file_handler = logging.FileHandler(filename=file_name,encoding = 'utf-8', mode = 'a')
            # level----指定打印的日誌等級;默認爲WARNING;可爲NOTSET、DEBUG、INFO、WARNING、ERROR、CRITICAL
            # format----指定整條日誌的格式;這裏設置爲「時間-等級-日誌內容」
            # datefmt----format中時間的格式;
            # filename----日誌輸出到的文件;默認打印到控制檯
            # filemode----日誌文件讀寫形式;默認爲「a」;配合filename使用,若是不用filename該參數也可不用
            # 原本輸出到文件使用filename和filemode兩個參數就能夠了,不須要handlers
            # 可是logging將日誌輸出到文件時中文會亂碼,而logging.basicConfig又沒有提供指定編碼的參數,要指定編碼只能使用handlers
            logging.basicConfig(level=logging.INFO,
                                format='%(asctime)s %(levelname)s %(message)s',
                                datefmt='%Y-%m-%d %H:%M:%S',
                                # filename=file_name,
                                # filemode='a',
                                handlers=[file_handler],
                                )

        # self.logger = logging.getLogger()

    def getLogger(self):
        logger = logging.getLogger()
        return logger

if __name__ == "__main__":
    # log_type = "console"
    log_type = "file"
    logger = LogConfig(log_type).getLogger()
    logger.debug('print by debug')
    logger.info('print by info')
    logger.warning('prit by warning')

 

3、日誌截圖

 

參考:編碼

https://docs.python.org/3/library/logging.html#levelsspa

https://www.jianshu.com/p/2ec5187a953e操作系統

相關文章
相關標籤/搜索