python中logging模块的字典形式应用
python中logging模块的字典形式应用
直接看代码:
1 # -*- coding:utf-8 -*- 2 import logging 3 import logging.config 4 import os 5 6 path = os.path.abspath(__file__) 7 BASE_DIR = os.path.dirname(os.path.dirname(path)) 8 9 debug_flag = True 10 11 # 给过滤器使用的判断 12 class RequireDebugTrue(logging.Filter): 13 # 实现filter方法 14 def filter(self, record): 15 return debug_flag 16 17 logging_config = { 18 #必选项,其值是一个整数值,表示配置格式的版本,当前唯一可用的值就是1 19 'version': 1, 20 # 是否禁用现有的记录器 21 'disable_existing_loggers': False, 22 23 # 过滤器 24 'filters': { 25 'require_debug_true': { 26 '()': RequireDebugTrue, #在开发环境,我设置DEBUG为True;在客户端,我设置DEBUG为False。从而控制是否需要使用某些处理器。 27 } 28 }, 29 30 #日志格式集合 31 'formatters': { 32 'simple': { 33 'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s', 34 }, 35 }, 36 37 # 处理器集合 38 'handlers': { 39 # 输出到控制台 40 'console': { 41 'level': 'DEBUG', # 输出信息的最低级别 42 'class': 'logging.StreamHandler', 43 'formatter': 'simple', # 使用standard格式 44 'filters': ['require_debug_true', ], # 仅当 DEBUG = True 该处理器才生效 45 }, 46 # 输出到文件 47 'log': { 48 'level': 'DEBUG', 49 'class': 'logging.handlers.RotatingFileHandler', 50 'formatter': 'simple', 51 'filename': os.path.join(BASE_DIR, 'debug.log'), # 输出位置 52 'maxBytes': 1024 * 1024 * 5, # 文件大小 5M 53 'backupCount': 5, # 备份份数 54 'encoding': 'utf8', # 文件编码 55 }, 56 }, 57 58 # 日志管理器集合 59 'loggers':{ 60 'root': { 61 'handlers': ['console','log'], 62 'level': 'DEBUG', 63 'propagate': True, # 是否传递给父记录器 64 }, 65 'simple': { 66 'handlers': ['console','log'], 67 'level': 'WARN', 68 'propagate': True, # 是否传递给父记录器, 69 } 70 } 71 } 72 73 logging.config.dictConfig(logging_config) 74 logger = logging.getLogger('root') 75 76 # 尝试写入不同消息级别的日志信息 77 logger.debug("debug message") 78 logger.info("info message") 79 logger.warn("warn message") 80 logger.error("error message") 81 logger.critical("critical message")