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(字串)
複製程式碼