Python记录器不符合设置级别

时间:2016-08-21 20:16:43

标签: python python-3.x logging

我在Python3交互式提示中创建了一个记录器:

>>> import logging
>>> logger = logging.getLogger('foo')
>>> logger.setLevel(logging.INFO)
>>> logger.warn('bar')
bar
>>> logger.info('bar')
>>> 

在这种情况下,我希望logger.info输出bar,因为我已经明确设置了日志记录级别。但事实并非如此。为什么呢?

1 个答案:

答案 0 :(得分:1)

实际上,在您的情况下,由于您尚未配置日志记录,因此不应输出任何内容。您需要运行ClassA或向记录器添加处理程序以期望任何输出:

std::tuple< std::unique_ptr< ClassA >, std::unique_ptr< ClassB > > Function1()
{
    std::tuple< std::unique_ptr< ClassA >, std::unique_ptr< ClassB > > garbage;
    get<0>(garbage).reset( /* ... */ );
    get<1>(garbage).reset( /* ... */ );
    return garbage;
}

void Function2()
{
    auto to_be_destroyed = Function1();
    // ... do something else

    // to_be_destroyed leaves scope
    // Is the instance of ClassB destroyed before the instance of ClassA?
}

正如评论中的larsks所提到的,在Python 3中,日志记录默认配置为级别logging.basicConfig()(这意味着如果您使用In [1]: import logging In [2]: logger = logging.getLogger('foo') In [3]: logger.setLevel(logging.INFO) In [4]: logger.warn('foo') No handlers could be found for logger "foo" In [5]: logger.info('foo') In [6]: logging.basicConfig() In [7]: logger.info('foo') INFO:foo:foo In [8]: logger.warn('foo') WARNING:foo:foo 或默认情况下任何更高级别,您将获得输出)。在您的情况下,您可以调用WARNING向所有记录器添加默认处理程序,如上例所示,或者向记录器添加处理程序:

warning()