当前位置: 首页 > 知识库问答 >
问题:

Python2.7日志级别的日志不起作用

袁桐
2023-03-14

我不明白的第一个例子是,下面只打印“warning:root:hello from warn”。如果我理解正确的话,“logging.info”实际上调用根记录器,而根记录器默认为警告级别。所以第一个“Hello from Info”被忽略,这很好。但为什么第二个“你好从信息”也没有打印出来?

import logging 
logging.info("hello from info")
logging.warn("hello from warn")

logging.basicConfig(level=logging.INFO)
logging.info("hello from info")

第二个问题是处理程序和记录器的日志级别。如果我们同时为处理程序和记录器设置日志级别,那么哪一个是有效的?或者我们只是为处理程序设置级别呢?以下面的例子为例。我们已经为StreamHandler设置了日志级别,但是“Hello from Info”没有打印到stdout中。只有“hello from warn”(此外,它不是“warning:t:hello from warn”)。为什么会这样?

import logging
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
logger = logging.getLogger('t')
logger.addHandler(ch)
logger.info("hello from info")
logger.warn("hello from warn")

共有1个答案

钱言
2023-03-14

但为什么第二个“你好从信息”也没有打印出来?

因为

>

  • logging.info/warn/error/debug在引擎盖下调用logging.basicconfig。示例:

    def info(msg, *args, **kwargs):
        if len(root.handlers) == 0:
            basicConfig()
        root.info(msg, *args, **kwargs)
    

    都是!记录器级别和处理程序级别是筛选记录的两个不同阶段。记录器级别定义实际传递给其处理程序的记录,而处理程序级别定义特定处理程序将处理哪些记录。例子:

    logger.setLevel(logging.INFO)
    handler.setLevel(logging.ERROR)
    logger.addHandler(handler)
    logger.info('spam')
    

    由于记录器具有级别信息,它将处理垃圾邮件记录并将其传递给处理程序。但是,处理程序具有级别错误,因此处理程序不会处理记录。

    logger.setLevel(logging.WARN)
    handler.setLevel(logging.DEBUG)
    logger.addHandler(handler)
    logger.info('spam')
    

    现在,处理程序将处理几乎所有记录,包括spam记录,因为它的级别是info,因此大于debug。但是,处理程序永远不会收到要处理的垃圾邮件,因为记录器不会处理它,因此不会将垃圾邮件传递给它的处理程序。

    logger.setLevel(logging.INFO)
    h1 = logging.StreamHandler()
    h1.setLevel(logging.CRITICAL)
    h2 = logging.FileHandler('some.log')
    h2.setLevel(logging.DEBUG)
    logger.addHandler(h1)
    logger.addHandler(h2)
    logger.info('spam')
    

  •  类似资料:
    • 如何编写一个简单的log4j2.xml文件,将不同级别的日志放入不同的文件中? 例如,我们有错误日志,任何信息日志,我需要将所有错误日志消息推入一个日志文件,所有信息日志消息推入另一个文件。 我怎么做?

    • 主要内容:如何设置日志级别?,日志级别如何工作?,Log4j 日志级别示例日志级别用于对日志文件中的信息进行分类。但是它们以非常具体的方式进行分类,即按紧急程度分类。该级别允许您管理以下类型的信息: 您可以在搜索过程中过滤您的日志文件。 您可以管理您记录的信息量。 系统中给出的信息量和类型以及事件日志由配置文件中的 log4j 日志级别设置控制。每条日志消息都以消息级别为前缀。 日志级别是org.apache.log4j.Level类的一个实例。 Log4j 具有以下级

    • 我的MBean部署在JBoss上。jboss日志记录级别设置为'info'。现在,当我将我的包的日志级别(java util logger)更改为“fine”(通过设置日志级别以编程方式运行时)时,它不会追加任何logger.fine(“....”)的消息。信息被过滤掉了。 是否有任何方法可以将java util记录器日志级别的更改传播到jboss日志级别?(java util有不同的级别->SE

    • SLF4J具有以下日志级别 JDK日志记录具有以下日志级别 如果我想将日志级别设置为DEBUG,那么该级别在JDK日志中不可用。谁能解释一下在这种情况下我们如何获得调试级别的日志记录。对于这种情况,我们需要做什么额外的配置吗? 已更新 这是我的属性文件配置 请让我知道我哪里错了。

    • 我在我的项目中进行了强制日志记录,并且我很难抑制我不想要的日志记录语句。 还有,我在使用log4j时看不到这些记录器。我正在尝试学习Logback,因为我已经被指派来评估它作为团队可能的升级。

    • 我有log4j2.xml,它部分配置为: 但是,跟踪消息并不存在于两个文件附加符(fileinfo/filedebug)中。当我更改FileDebug log level=“TRACE”时,就会出现跟踪消息。