从JSON读取logging.INFO日志级别被识别为字符串的解决求助
日志级别字符串传入
logger.setLevel()报错问题 问题详情
JSON配置文件中日志级别字段如下:
{ "loglevel":"logging.INFO" }
运行以下代码时抛出错误:
ValueError: Unknown level: 'logging.INFO'
相关代码:
import logging import json with open("export_tool_config.json", "r") as f: data_load=json.load(f) log_level = data_load['loglevel'] logger = logging.getLogger(__name__) logger.setLevel(log_level)
问题核心是logger.setLevel()需要接收logging模块的级别常量(如logging.INFO),而非字符串格式的'logging.INFO'。
解决方法
方法1:解析字符串获取对应常量
通过拆分字符串提取级别名称,再用getattr从logging模块中获取对应常量:
import logging import json with open("export_tool_config.json", "r") as f: data_load = json.load(f) log_level_str = data_load['loglevel'] # 拆分字符串,提取级别名称部分 _, level_name = log_level_str.split('.') log_level = getattr(logging, level_name) logger = logging.getLogger(__name__) logger.setLevel(log_level)
方法2:修改JSON配置为纯级别名称
将JSON中的日志级别改为纯级别标识(如"INFO"),再直接映射到常量:
修改后的JSON:
{ "loglevel": "INFO" }
对应代码:
import logging import json with open("export_tool_config.json", "r") as f: data_load = json.load(f) log_level = getattr(logging, data_load['loglevel']) logger = logging.getLogger(__name__) logger.setLevel(log_level)
方法3:用字典映射固定级别
如果不想修改JSON配置,可提前建立字符串到常量的映射字典:
import logging import json level_mapping = { "logging.INFO": logging.INFO, "logging.DEBUG": logging.DEBUG, "logging.WARNING": logging.WARNING, "logging.ERROR": logging.ERROR, "logging.CRITICAL": logging.CRITICAL } with open("export_tool_config.json", "r") as f: data_load = json.load(f) log_level = level_mapping[data_load['loglevel']] logger = logging.getLogger(__name__) logger.setLevel(log_level)
内容的提问来源于stack exchange,提问作者ProgrammerSk
相关产品推荐
相关产品推荐

