Python能否返回实际代码?及类中日志器级别设置实现问询
解答你的Python Logger级别设置问题
先回应你第一个问题:Python里当然可以实现字符串到实际代码常量的转换,但绝对不建议用eval(安全性差,尤其是当logLevel参数来自外部输入时),更稳妥的方式是用字典映射或者getattr函数来处理,既安全又简洁。
接下来重点解决你的Logger级别初始化问题:你之前的思路方向是对的,但返回字符串'logging.INFO'没用——因为setLevel需要的是logging模块中定义的整数常量(比如logging.INFO对应20,logging.WARNING对应30),而非字符串。下面给你两种靠谱的实现方案:
方案一:字典映射(直观易维护,适合自定义规则)
先定义一个字符串到logging级别的映射字典,初始化时直接取值即可:
import logging def get_log_level(log_level_str): level_map = { 'info': logging.INFO, 'warning': logging.WARNING, 'error': logging.ERROR } # 兼容大小写,同时设置默认值防止无效输入 return level_map.get(log_level_str.lower(), logging.INFO) class ClassA: def __init__(self, log_level='info'): # 先创建logger实例 self.logger = logging.getLogger(__name__) # 设置日志级别 self.logger.setLevel(get_log_level(log_level)) # 新增Handler确保日志能输出到控制台(默认无Handler可能看不到日志) handler = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) self.logger.addHandler(handler) # 测试示例 a = ClassA(log_level='warning') a.logger.info('这条INFO日志不会显示') a.logger.warning('这条WARNING日志会正常输出')
方案二:用getattr直接获取模块属性(更简洁)
利用Python的getattr函数,直接从logging模块中取出对应级别常量,只需把输入字符串转成大写(因为logging的常量都是大写命名,比如INFO、WARNING):
import logging class ClassA: def __init__(self, log_level='info'): self.logger = logging.getLogger(__name__) try: # 转大写后从logging模块获取对应属性 level = getattr(logging, log_level.upper()) except AttributeError: # 输入无效级别时默认设为INFO level = logging.INFO self.logger.setLevel(level) # 添加Handler确保日志输出 handler = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) self.logger.addHandler(handler) # 测试示例 a = ClassA(log_level='error') a.logger.warning('这条WARNING日志不会显示') a.logger.error('这条ERROR日志会正常输出')
额外注意事项:
- 必须先创建logger实例(比如
logging.getLogger(__name__)),否则调用self.logger.setLevel会报错。 - 默认情况下,logger如果没有添加Handler,日志不会输出到控制台/文件,所以建议初始化时添加至少一个Handler。
- 对输入的
log_level做大小写兼容处理,能提升用户使用的容错性(比如输入'Info'或'INFO'都能正常识别)。
内容的提问来源于stack exchange,提问作者user9549355
相关产品推荐
相关产品推荐

