我在Python3交互式提示中创建了一个记录器:
>>> import logging
>>> logger = logging.getLogger('foo')
>>> logger.setLevel(logging.INFO)
>>> logger.warn('bar')
bar
>>> logger.info('bar')
>>>
在这种情况下,我希望logger.info
输出bar
,因为我已经明确设置了日志记录级别。但事实并非如此。为什么呢?
答案 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()