【问题标题】:Python logging.basicConfig set different level for handlersPython logging.basicConfig 为处理程序设置不同的级别
【发布时间】:2026-01-11 14:05:01
【问题描述】:

我的日志记录有以下代码:

logging.basicConfig(
                    handlers=[
                        logging.FileHandler("log.txt", "w"),
                        logging.StreamHandler()
                    ],
                    format='%(levelname)s - %(asctime)s - %(message)s',
                    datefmt='%H:%M:%S',
                    level=logging.DEBUG)

我想为我的 2 个处理程序设置不同的级别。 但我真的很想保持简单,我想用 basicConfig 做到这一点。

有什么办法可以做到吗?

我试过了,但失败了:

logging.basicConfig(
                    handlers=[
                        logging.FileHandler("log.txt", "w", level=logging.DEBUG),
                        logging.StreamHandler(level=logging.DEBUG)
                    ],
                    format='%(levelname)s - %(asctime)s - %(message)s',
                    datefmt='%H:%M:%S')

TypeError: init() 得到了一个意外的关键字参数 'level'

【问题讨论】:

  • 是的,您可以将level 参数传递给两个处理程序。
  • 酷,这就是我的观点。我没有成功
  • 发生了什么?显示您尝试过的代码和遇到的错误。
  • 我更新了我的问题
  • 您必须先创建处理程序,然后在其上调用.setLevel(level)。使用logging.config.dictConfig() 可以让您直接在处理程序的定义中设置级别(恕我直言,实际上更具可读性)。

标签: python logging


【解决方案1】:

我认为您实际上不会将 DEBUG 用于处理程序级别,因为无论您是否将级别设置为 DEBUG,它们都会传递所有消息 (>= DEBUG)。对于更高级别,我将其称为 level1level2 以进行说明,您可以这样做

h1 = logging.FileHandler(...); h1.setLevel(level1)
h2 = logging.StreamHandler(...); h2.setLevel(level2)

然后将handlers=[h1, h2] 传递给basicConfig

【讨论】: