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(字符串)
复制代码