你可能应该调查一下Python 日志记录指南 http://docs.python.org/howto/logging.html了解它是如何工作的。
简而言之,模块通常所做的就是获取以下形式的记录器G_LOG = logging.getLogger('package.name')
并向记录器发送消息:G_LOG.info('some message'), G_LOG.exception('something bad happened')
。模块通常不应该配置任何东西。
使用模块的应用程序可以打开日志记录并根据记录器名称配置处理程序:
- 收听所有消息,或者
- 只监听超过特定阈值的消息,或者
- 仅监听来自名称开头的记录器的消息
package
, or
- 仅监听来自名称开头的记录器的消息
package.name
, etc
最简单的方法是通过配置日志记录日志记录.basicConfig http://docs.python.org/library/logging.html#logging.basicConfig在你的应用程序开头的某个地方:
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)-8s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename=log_file, filemode='a')
这样您就可以将所有模块的所有日志消息写入log_file
.
如果您需要更详细的日志记录策略(将来自不同记录器的日志放入不同的文件,或将堆栈跟踪发送到单独的文件),最好定义一个日志记录配置文件并使用配置日志记录日志配置.dictConfig http://docs.python.org/library/logging.config.html#logging.config.dictConfig or logging.config.fileConfig
.
附:我通常创建两个记录器作为模块变量:
G_LOG = logging.getLogger(__name__)
ST_LOG = logging.getLogger('stacktrace.' + __name__)
to G_LOG
我只发送一行消息。到ST_LOG
我使用复制重要消息ST_LOG.exception
这隐含地有exc_info=True
并写入当前异常的堆栈跟踪。
在应用程序开始时,我加载一个配置,该配置配置两个记录器(以及它们的两个文件处理程序):一个接收以stacktrace
并且有propagate=0
(即堆栈跟踪消息在顶部不可见)和处理其余消息的根记录器。我不会将完整的日志配置文件放在这里,因为这是了解其工作原理的有用家庭作业。