<p>另一个答案是“工作”,但在这里并不能说明全部情况。答案声称您需要更改记录器<em>和</em>的处理程序,这是不正确的</p>
<p>事实上,有两种<code>setLevel</code>方法(在记录器和处理程序上)<strong>记录器中设置的级别确定将传递给其处理程序的消息的严重性。每个处理程序中设置的级别决定处理程序将发送哪些消息。</strong>在正常使用中,仅将其中一个设置为“关键”就足以过滤该信息事件</p>
<p>它在您的情况下不起作用,因为没有在<a href="https://docs.python.org/3/library/logging.html#logger-objects" rel="nofollow noreferrer">documented way</a>中创建记录器:</p>
<blockquote>
<p>Note that Loggers should NEVER be instantiated directly, but always through the module-level function <code>logging.getLogger(name)</code>.</p>
</blockquote>
<p>使用<code>logging.Logger(...)</code>创建记录器绕过了日志模块的全局状态,并破坏了日志树的层次结构。具体地说,它导致<a href="https://github.com/python/cpython/blob/61d8c54f43a7871d016f98b38f86858817d927d5/Lib/logging/__init__.py#L1709-L1729" rel="nofollow noreferrer">^{<cd3>}</a>返回一个错误缓存的结果</p>
<p>如果以常规方式创建,则在记录器实例上设置级别将不会影响处理程序:</p>
<pre><code>import logging
# logger = logging.Logger("MyLogger", level=logging.INFO) # no
logger = logging.getLogger("MyLogger") # yes
formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
console = logging.StreamHandler()
console.setFormatter(formatter)
logger.addHandler(console)
logger.setLevel("INFO")
logger.info("should show up")
logger.setLevel(logging.CRITICAL)
logger.info("should not show up")
</code></pre>