Python3的logging功能是比較豐富的支持不一樣層次的日誌輸出,但或是咱們想在日誌前輸出時間、或是咱們想要將日誌輸入到文件,咱們仍是想要自定義日誌類。html
以前本身也嘗試寫過但感受文檔太亂看不懂怎麼寫,今天有人拿個半成品來問爲何代碼報錯,在其基礎上改造了一下。python
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')
參考:編碼