擅长:python、mysql、java
<blockquote>
<p>Python docs say logging module is thread-safe, so I guess I don't really need LogRlock, right?</p>
</blockquote>
<p>正确,不需要锁来保护日志代码。在</p>
<blockquote>
<p>And another question, do I need to destroy the instance at the end of above method? If so, how should I do it?</p>
</blockquote>
<p>不,你没有。实际上,在Python中不能销毁对象。当没有对它们的引用时,它们将被自动垃圾回收。在</p>
<p>但是,除此之外,<code>Logger</code>对象将在程序的生命周期内持续存在。即使您可以在日志记录功能结束时销毁它,也不应该这样做</p>
<blockquote>
<p>And is this a safe way to use logging module?</p>
</blockquote>
<p>不,不是。正如在注释中所指出的,您正在日志记录方法中对记录器执行设置操作(如添加处理程序和格式化程序),而您应该在程序开始时只执行一次。现在的做法是,每次记录消息时,都会添加一个处理程序,并且每个处理程序都会打印出它接收到的每条消息,因此,您会发现,您记录的第一条消息打印一次,第二条消息打印两次,第三条消息打印三次,等等,直到您用不必要的副本淹没日志文件为止你的日志消息。在</p>
<p>我建议使用某种设置函数,在程序开始时调用一次来配置日志记录行为。关于设置记录器级别、添加处理程序和添加格式化程序的所有内容都在其中。然后,在使用日志代码的每个模块(<code>.py</code>文件)中,在模块级别,您可以获得适当的记录器并将其存储在模块级变量中:</p>
<pre><code>logger = logging.getLogger("package.module")
</code></pre>
<p>或者,如果您在模块中使用多个记录器,请对每个记录器执行此操作。在每个需要记录消息的函数中,您可以</p>
^{pr2}$
<p>对<code>logger.info</code>的调用将替换您自己的<code>LogMethod</code>。在</p>