<p>在每个模块中,最佳实践是定义一个如下所示的记录器:</p>
<pre><code>import logging
logger = logging.getLogger(__name__)
</code></pre>
<p>在模块顶部附近,然后在模块中的其他代码中执行</p>
<pre><code>logger.debug('My message with %s', 'variable data')
</code></pre>
<p>如果需要在模块中细分日志记录活动,请使用例如</p>
<pre><code>loggerA = logging.getLogger(__name__ + '.A')
loggerB = logging.getLogger(__name__ + '.B')
</code></pre>
<p>并酌情登录到<code>loggerA</code>和<code>loggerB</code>。</p>
<p>在主程序中,例如:</p>
<pre><code>def main():
"your program code"
if __name__ == '__main__':
import logging.config
logging.config.fileConfig('/path/to/logging.conf')
main()
</code></pre>
<p>或者</p>
<pre><code>def main():
import logging.config
logging.config.fileConfig('/path/to/logging.conf')
# your program code
if __name__ == '__main__':
main()
</code></pre>
<p>请参阅<a href="http://docs.python.org/howto/logging.html#logging-from-multiple-modules">here</a>以获取来自多个模块的日志,以及<a href="http://docs.python.org/howto/logging.html#configuring-logging-for-a-library">here</a>以获取将被其他代码用作库模块的代码的日志配置。</p>
<p><strong>更新:</strong>调用<code>fileConfig()</code>时,如果使用的是Python 2.6或更高版本,则可能需要指定<code>disable_existing_loggers=False</code>(有关详细信息,请参见<a href="http://docs.python.org/2/library/logging.config.html#logging.config.fileConfig">the docs</a>)。默认值为<code>True</code>表示向后兼容,这将导致所有现有的日志记录器被<code>fileConfig()</code>禁用,除非它们或它们的祖先在配置中显式命名。值设置为<code>False</code>时,现有的记录器将保持独立。如果使用Python 2.7/Python 3.2或更高版本,您可能希望考虑使用比<code>fileConfig()</code>更好的<code>dictConfig()</code>API,因为它提供了对配置的更多控制。</p>