“Logger 为何不输出”是日志排查中非常常见的问题。要定位原因,通常需要从配置、级别、输出目标、代码使用方式这几方面逐一检查。下面按最常见原因给你一个排查清单(以 Python 为例,但思路通用)。
import logging
logging.basicConfig(level=logging.WARNING)
logger = logging.getLogger(__name__)
logger.info("这条看不到")
✅ 原因:
INFO < WARNING,默认不会输出。
✅ 解决:
logging.basicConfig(level=logging.DEBUG)
import logging
logger = logging.getLogger("my_logger")
logger.setLevel(logging.DEBUG)
logger.debug("看不到")
❌ 原因:
logger 有级别,但没有 handler(没有真正输出对象)。
✅ 解决:
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("a.b.c")
logger.info("看不到?")
✅ 原因:
basicConfig() 只给 root logger 配置,子 logger 可能没 handler。
✅ 解决方式之一:
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
或:
logging.basicConfig(level=logging.DEBUG)
放在程序最开始。
logger.propagate = False
❌ 结果:
日志不会传到 root logger,也看不到。
✅ 检查:
print(logger.propagate) # 应该是 True
✅ 检查:
handler = logging.StreamHandler() # stdout
handler = logging.FileHandler("a.log")
logger.warning # ❌ 没加 ()
logger.warning("消息") # ✅
logger = logging.getLogger(__name__)
def func():
logger = ... # ❌ 覆盖了 logger
✅ 建议:
不要重复定义 logger 同名变量。
以下情况常见:
✅ 特点:
✅ 解决办法:
dictConfigimport logging
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s %(levelname)s %(name)s %(message)s"
)
logger = logging.getLogger("test")
logger.debug("能看到吗?")
如果你愿意,可以把下面信息发我:
我可以直接帮你指出是哪一行导致不输出。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。