Python如何通过用户输入动态调整logging模块的日志级别?
代码问题排查与优化实现
原代码核心问题
- 缺失基础运行依赖:没有导入
logging模块,也未定义可选日志级别列表logLevelArr,直接运行会抛出名称错误异常 - 日志执行顺序错误:用户输入验证阶段的
logger.error()、logger.debug(),以及输入正确后的logger.info(),全部执行在logger.setLevel()之前。此时logger默认使用WARNING级别,会直接丢弃INFO、DEBUG级别的日志,无法写入日志文件 - 代码冗余度高:用4个独立if分支判断日志级别,且输入提示、可选级别打印逻辑重复编写,可维护性差
- 未做handler去重:如果代码被多次调用,会重复添加文件handler,导致同一条日志多次写入文件
优化后可运行代码
import logging # 定义可选日志级别列表 logLevelArr = ['CRITICAL', 'ERROR', 'INFO', 'DEBUG'] print('可选日志级别:' + str(logLevelArr)) logger = logging.getLogger(__name__) # 临时设置为DEBUG级别,保证用户输入过程的所有操作日志都能被记录 logger.setLevel(logging.DEBUG) # handler去重,避免日志重复写入 if not logger.handlers: formatter = logging.Formatter('%(asctime)s:%(levelname)s:%(message)s') file_handler = logging.FileHandler('consoleappinfo.log', encoding='utf-8') file_handler.setFormatter(formatter) logger.addHandler(file_handler) # 合并重复输入逻辑 while True: logLevel = input('请输入要使用的日志级别:').strip().upper() if logLevel in logLevelArr: break print("输入不在可选范围内,请重新选择!") print('可选日志级别:' + str(logLevelArr)) logger.error('用户输入了错误的日志级别') logger.debug('---> 等待用户重新输入日志级别') print('\n*** 已成功选择日志级别:' + logLevel + ' ***') logger.info('---> 用户最终选择的日志级别为:' + logLevel) # 动态设置最终生效的日志级别,替换冗余分支判断 logger.setLevel(getattr(logging, logLevel))
如果需要保留原英文提示,只需要把打印和输入提示的中文替换回原英文内容即可。
内容的提问来源于stack exchange,提问作者Payam Taheri
相关产品推荐
相关产品推荐

