擅长:python、mysql、java
<p>记录器只创建一次,但会创建多个处理程序。</p>
<p>创建一次<code>A</code>。</p>
<pre><code>a = A()
for msg in ["hey", "there"]:
a.p(msg)
</code></pre>
<p>或按如下方式更改<code>_get_logger</code>:</p>
<pre><code>def _get_logger(self):
loglevel = logging.INFO
l = logging.getLogger(__name__)
if not getattr(l, 'handler_set', None):
l.setLevel(loglevel)
h = logging.StreamHandler()
f = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
h.setFormatter(f)
l.addHandler(h)
l.setLevel(loglevel)
l.handler_set = True
return l
</code></pre>
<p><strong>更新</strong></p>
<p>自Python 3.2以来,您可以使用<a href="https://docs.python.org/3/library/logging.html#logging.Logger.hasHandlers" rel="noreferrer">^{<cd3>}</a>查看此记录器是否配置了任何处理程序。(谢谢@toom)</p>
<pre><code>def _get_logger(self):
loglevel = logging.INFO
l = logging.getLogger(__name__)
if not l.hasHandlers():
...
return l
</code></pre>