日誌模組和第三方模組
阿新 • • 發佈:2022-04-01
日誌模組
日誌模組的主要組成部分
import logging # 1.logger物件:產生日誌 logger = logging.getLogger('轉賬記錄') # 2.filter物件:過濾日誌 # handler自帶有基本的過濾操作 # 3.handler物件:控制日誌的輸出位置(檔案、終端等) hd1 = logging.FileHandler('a1.log', encoding='utf-8') # 儲存到檔案 hd2 = logging.FileHandler('a2.log', encoding='utf-8') # 儲存到檔案 hd3 = logging.StreamHandler() # 輸出到終端 # 4.format物件:控制日誌的格式 fm1 = logging.Formatter( fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', ) fm2 = logging.Formatter( fmt='%(asctime)s - %(name)s: %(message)s', datefmt='%Y-%m-%d', ) # 5.給logger物件繫結handler物件 logger.addHandler(hd1) logger.addHandler(hd2) logger.addHandler(hd3) # 6.給handler繫結formmate物件 hd1.setFormatter(fm1) hd2.setFormatter(fm2) hd3.setFormatter(fm1) # 7.設定日誌等級 logger.setLevel(20) # 8.記錄日誌 logger.info('tips……')
配置字典
import logging import logging.config # 定義日誌輸出格式 開始 standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \ '[%(levelname)s][%(message)s]' #name用於getlogger指定的名字 simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' # 定義日誌輸出格式 結束 # 自定義檔案路徑 logfile_path = 'a3.log' # log配置字典 LOGGING_DIC = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': standard_format }, 'simple': { 'format': simple_format }, }, 'filters': {}, # 過濾日誌 'handlers': { #列印到終端的日誌 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', # 列印到螢幕 'formatter': 'simple' }, #列印到檔案的日誌,收集info及以上的日誌 'default': { 'level': 'DEBUG', 'class': 'logging.handlers.RotatingFileHandler', # 儲存到檔案 'formatter': 'standard', 'filename': logfile_path, # 日誌檔案 'maxBytes': 1024*1024*20, # 日誌大小 20m 'backupCount': 6, 'encoding': 'utf-8', # 日誌檔案的編碼 }, }, 'loggers': { #logging.getLogger(__name__)拿到的logger配置 '註冊記錄': { 'handlers': ['default'], # 這裡把上面定義的兩個handler都加上,即log資料既寫入檔案又列印到螢幕 'level': 'DEBUG', 'propagate': True, # 向上(更高level的logger)傳遞 }, # 當鍵不存在的情況下 (key設為空字串)預設都會使用該k:v配置 '登陸記錄': { 'handlers': ['default', 'console'], # 這裡把上面定義的兩個handler都加上,即log資料既寫入檔案又列印到螢幕 'level': 'WARNING', 'propagate': True, # 向上(更高level的logger)傳遞 }, # 當鍵不存在的情況下 (key設為空字串)預設都會使用該k:v配置 }, } # 使用日誌字典配置 logging.config.dictConfig(LOGGING_DIC) # 自動載入字典中的配置 logger1 = logging.getLogger('註冊記錄') logger2 = logging.getLogger('登陸記錄') logger1.debug('註冊成功') logger2.warning('登陸成功')