You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:45:06