python.logging:为什么我的non-basicConfig设置不起作用?

发布于 2021-01-29 15:04:31

我想从主模块和所有子模块登录到单个日志文件。

从主文件(我在其中定义记录器)发送的日志消息按预期工作。但是缺少从调用发送到导入函数的函数。

如果我使用下面的示例1中的logging.basicConfig,它将正常工作。但是允许更多自定义设置的第二个示例不起作用。

有什么想法吗?

# in the submodule I have this code
import logging
logger = logging.getLogger(__name__)

示例1-工作

在这里,我创建了两个处理程序,并将它们传递给basicConfig

# definition of root looger in main module

formatter = logging.Formatter(fmt="%(asctime)s %(name)s.%(levelname)s: %(message)s", datefmt="%Y.%m.%d %H:%M:%S")

handler = logging.FileHandler('logger.log')
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)

handler2 = logging.StreamHandler(stream=None)
handler2.setFormatter(formatter)
handler2.setLevel(logging.DEBUG)

logging.basicConfig(handlers=[handler, handler2], level=logging.DEBUG)
logger = logging.getLogger(__name__)

示例2-无法正常工作

在这里,我创建两个处理程序,addHandler()并将它们添加到根记录器:

# definition of root looger in main module

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

handler = logging.FileHandler('logger.log')
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)
#handler.setLevel(logging.ERROR)
logger.addHandler(handler)

handler = logging.StreamHandler(stream=None)
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
关注者
0
被浏览
87
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您需要在软件的主模块中配置(唯一的)根记录器。这是通过调用

    logger = logging.getLogger() #without arguments
    

    代替

    logger = logging.getLogger(__name__)
    

    (有关记录的Python文档)

    第二个示例使用您的脚本名称创建一个单独的子记录器。

    如果在子模块中未定义任何处理程序,则将日志消息向下传递到根记录程序以进行处理。

    一个相关的问题可以在这里找到: Python日志记录-
    如何继承root记录程序级别和处理程序



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看