logging模組配置筆記

公號_python學習開發發表於2018-10-16

logging模組配置筆記

log檔案的路徑

#判斷在當前的目錄下是否有一個logs資料夾。沒有則建立
log_dir = os.path.dirname(os.path.dirname(__file__))+'/logs'
if not os.path.exists(log_dir):
    os.mkdir(log_dir)
複製程式碼

設定log檔名

#在上述的資料夾生成web.log檔案
today=datetime.datetime.now().strftime("%Y%m%d")
log_path = os.path.join(log_dir, f'test_{today}.log')
複製程式碼

dictConfig通用引數配置

version版本號
'version': 1.0#固定值1.0
複製程式碼
formatters日誌格式設定
 'format': formatter的格式,字串,比如'%(levelname)s-%(message)s'
 'datefmt': 日期的輸出格式,字串,比如'%Y-%m-%d %H:%M:%S'
複製程式碼
然後看下面一個配置
'formatters': {
        'detail': {#detail自定義一個格式名字
            'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
            'datefmt': "%Y-%m-%d %H:%M:%S"
        },
        'simple': {#同detail自定義一個格式名字,這裡定義另一種格式
            'format': '%(name)s - %(levelname)s - %(message)s',
        },
    }
複製程式碼
handlers日誌格式設定
然後看下面一個配置
    'handlers': {
        'console': {#console是自定義的handlers名字
            'class': 'logging.StreamHandler',#構造handler使用的類,字串,必須使用全路徑
            'level': 'INFO',#級別
            'formatter': 'detail'#上面的detail格式
        },
        'file': {#file是自定義的handlers名字
            'class': 'logging.handlers.RotatingFileHandler',
            'maxBytes': 1024 * 1024 * 5,#每個日誌檔案最大5M,超過之後重新命名一個檔案
            'backupCount': 10,#最多備份10個日誌檔案,
            'filename': log_path,#上面定義的log檔名
            'level': 'INFO',
            'formatter': 'detail',
            'encoding': 'utf-8',
        },
複製程式碼
loggers

必須指定一個級別和handlers列表

    'loggers': {
        'crawler': {#crawler是自定義的日誌物件名字
            'handlers': ['console', 'file'],#輸出方式
            'level': 'DEBUG',#級別
        },
        'parser': {
            'handlers': ['file'],#輸出方式
            'level': 'INFO',#級別
        }
    }
複製程式碼

以上日誌配置綜合

log_config = {
    'version': 1.0,
    'formatters': {
        'detail': {
            'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
            'datefmt': "%Y-%m-%d %H:%M:%S" #如果不加這個會顯示到毫秒。
        },
        'simple': {
            'format': '%(name)s - %(levelname)s - %(message)s',
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',#日誌列印到螢幕顯示的類。
            'level': 'INFO',
            'formatter': 'detail'
        },
        'file': {
            'class': 'logging.handlers.RotatingFileHandler',#日誌列印到檔案的類。
            'maxBytes': 1024 * 1024 * 5, #單個檔案最大記憶體
            'backupCount': 10, #備份的檔案個數
            'filename': log_path, #日誌檔名
            'level': 'INFO',# 日誌等級
            'formatter': 'detail', #呼叫上面的哪個格式
            'encoding': 'utf-8', #編碼
        },
    },
    'loggers': {
        'crawler': {
            'handlers': ['console', 'file'],#列印螢幕和寫入檔案
            'level': 'DEBUG',#只顯示錯誤的log
        },
        'parser': {
            'handlers': ['file'],
            'level': 'INFO',
        },
        'other': {
            'handlers': ['console', 'file'],
            'level': 'INFO',
        },
        'storage': {
            'handlers': ['file'],
            'level': 'INFO',
        }
    }
}
複製程式碼

建立日誌物件使用

1.通過呼叫dictConfig(config)方法進行配置,config物件為一個dict

log_conf.dictConfig(log_config)
複製程式碼

2.生成不同的日誌物件

crawler = logging.getLogger('crawler')
parser = logging.getLogger('parser')
複製程式碼

3.列印不同級別的log

常用的兩種

crawler.error(錯誤資訊)
crawler.info(字串)
複製程式碼


相關文章