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檔案
log_path = os.path.join(log_dir, 'web.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',
},
'parser': {
'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(字元串)