本文转载自微信公众号「区块链研究实验室」,作者链三丰。转载本文请联系区块链研究实验室公众号。
通过定义明确,信息量大且结构方便的日志,调试和跟踪应用程序执行的理想方式。
它们是任何编程语言(不仅仅是Python)中任何大型,中型或大型项目必不可少的组成部分。
关于Python日志记录库,大部分开发人员都善于解释如何设置一个记录系统用于一个Python脚本。但是,几乎找不到如何设置Python日志记录库以在整个应用程序范围内使用,以及如何在所有项目模块中舒适地正确集成和共享日志记录信息的解释器。
在本文中,我将分享我的个人日志记录模板,您可以轻松地将其用于具有多个模块的任何项目。
让我们开始吧!
制作一个简单的Python项目
首先让我们现在开始初始化一个简单的项目,创建一个名为“ MyAwesomeProject ”的文件夹,在其中创建一个名为的新Python文件app.py。
这将是我们应用程序的起点,我将使用这个项目来构造我正在谈论的模板的一个简单的工作示例。
继续并在VSCode(或您喜欢的任何编辑器)中打开您的项目。
现在,让我们为应用程序级别的日志记录设置创建一个新模块,我们将其称为logger。
创建应用程序级别记录器
这是模板的主要部分,我们创建一个名为logger.py的新文件。
让我们定义一个根记录器,并将其用于初始化我们的应用程序级记录器。是时候编写一些代码了!
导入一些和我们需要的应用名称:
- import logging
- import sys
- APP_LOGGER_NAME = 'MyAwesomeApp'
我们将在app.py中调用的函数:
- def setup_applevel_logger(logger_name = APP_LOGGER_NAME, file_name=None):
- logger = logging.getLogger(logger_name)
- logger.setLevel(logging.DEBUG)
- formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
- sh = logging.StreamHandler(sys.stdout)
- sh.setFormatter(formatter)
- logger.handlers.clear()
- logger.addHandler(sh)
- if file_name:
- fh = logging.FileHandler(file_name)
- fh.setFormatter(formatter)
- logger.addHandler(fh)
- return logger
我们将使用预定义的DEBUG级别定义记录器,并使用Formatter构造记录消息。然后我们将其分配给流处理程序,以便将消息写入控制台。
接下来,我们还确保包含一个文件,我们也可以在其中另外存储所有日志消息,这是通过记录FileHandler来完成的。
最后,我们返回记录器。
此时需要另一个功能,它将确保我们的模块可以在需要时调用记录器。定义一个get_logger函数。
- def get_logger(module_name):
- return logging.getLogger(APP_LOGGER_NAME).getChild(module_name)
另外,为了将此模块用作软件包,我们可以选择创建一个名为logger的文件夹,并将此文件放入其中。如果这样做,我们还需要在文件夹中包含___init__.py文件,然后执行
- from .logger import *
以确保我们可以从包中导入模块,现在需要完成主要设置!
设置我们的模块级日志
可以完成一个简单的模块来测试我们的记录器,以更好地了解模板。让我们将其定义为一个简单的module.py。
- import logger
- log = logger.get_logger(__name__)
- def multiply(num1, num2): # just multiply two numbers
- log.debug("Executing multiply function.")
- return num1 * num2
现在,该模块可以访问记录器,并应显示带有适当模块名称的消息。
让我们现在进行测试!
运行我们的脚本并测试记录器
现在,我们构建app.py。
- import logger
- log = logger.setup_applevel_logger(file_name = 'app_debug.log')
- import mymodule
- log.debug('Calling module function.')
- mymodule.multiply(5, 2)
- log.debug('Finished.')
现在,确认您的目录包含以下文件:
项目文件夹
最后,只需通过以下命令运行脚本:
- python3 app.py
您应该得到类似以下的输出:
并且您的目录结构也应该更改为包括新的日志文件,继续检查其内容!
日志文件出现!
以上我们成功的搭建了Python日志记录库。