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

Python logging模块中‘TypeError: RootLogger object is not callable’的根因是什么?

单元测试日志配置报错:'RootLogger' object is not callable

除了一篇随机论坛帖子外,我未找到该问题的任何解决方案,因此在此发布,希望后续遇到该问题的开发者能直接获取相关信息。

我的单元测试日志配置代码如下:

import unittest
import logging

logging.basicConfig(filename="Testing.log", format="%(asctime)s:%(levelname)s: %(message)s", level=logging.DEBUG, filemode='w+')

def utility_method():
 # do some stuff
 logging.getLogger().debug("This is a debug message")

class TestingStuff(unittest.TestCase):

  loggerInstance = None
  @classmethod
  def setUpClass(cls):
    # do setup stuff
    global logging
    TestingStuff.loggerInstance = logging.getLogger()
 
  @classmethod
  def tearDownClass(cls):
    # do cleanup stuff
    pass

  def test_T_01(self):
    self.loggerInstance("Testing T_01")

  def test_T_02(self):
    self.loggerInstance("Testing T_02")

if __name__=="__main__":
  unittest.main()

运行后抛出如下错误:

EE
======================================================================
ERROR: test_T_01 (__main__.TestingStuff)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\User\Testing\test.py", line 25, in test_T_01
    self.loggerInstance("Testing T_01")
TypeError: 'RootLogger' object is not callable

======================================================================
ERROR: test_T_02 (__main__.TestingStuff)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\User\Testing\test.py", line 28, in test_T_02
    self.loggerInstance("Testing T_02")
TypeError: 'RootLogger' object is not callable

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (errors=2)

错误根本原因

你将logging.getLogger()返回的RootLogger实例当成可调用函数直接执行了,这是核心错误。RootLogger对象本身不具备可调用特性,无法直接通过loggerInstance("消息")这种方式输出日志。

正确的做法是调用Logger实例对应的日志级别方法,比如debug()、info()、warning()、error()等,根据你需要的日志等级选择对应的方法。

修正后的代码示例

import unittest
import logging

logging.basicConfig(filename="Testing.log", format="%(asctime)s:%(levelname)s: %(message)s", level=logging.DEBUG, filemode='w+')

def utility_method():
 # do some stuff
 logging.getLogger().debug("This is a debug message")

class TestingStuff(unittest.TestCase):

  loggerInstance = None
  @classmethod
  def setUpClass(cls):
    # do setup stuff
    TestingStuff.loggerInstance = logging.getLogger()
 
  @classmethod
  def tearDownClass(cls):
    # do cleanup stuff
    pass

  def test_T_01(self):
    self.loggerInstance.debug("Testing T_01")  # 调用debug方法输出日志

  def test_T_02(self):
    self.loggerInstance.info("Testing T_02")   # 调用info方法输出日志

if __name__=="__main__":
  unittest.main()

内容的提问来源于stack exchange,提问作者doa4321

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:27:45