本文转载自微信公众号《区块链研究室》,作者连三丰。转载本文请联系区块链研究实验室公众号。使用定义明确、信息丰富且结构方便的日志来调试和跟踪应用程序执行的理想方式。它们是任何编程语言(不仅仅是Python)的任何大中型项目的重要组成部分。关于Python日志库,大多数开发人员都擅长解释如何设置日志系统以与Python脚本一起使用。然而,很少有人解释如何为应用程序范围的使用设置Python日志记录库,以及如何在所有项目模块之间舒适地集成和共享日志记录信息。在本文中,我将分享我的个人日志记录模板,您可以轻松地将其用于具有多个模块的任何项目。让我们开始吧!首先制作一个简单的Python项目让我们现在开始初始化一个简单的项目,创建一个名为“MyAwesomeProject”的文件夹,并在其中创建一个名为app.py的新Python文件。这将是我们应用程序的起点,我将使用该项目构建我正在谈论的模板的一个简单工作示例。继续并在VSCode(或您喜欢的任何编辑器)中打开您的项目。现在,让我们为应用程序级别的日志设置创建一个新模块,我们将其称为logger。创建应用程序级记录器这是模板的主要部分,我们创建一个名为logger.py的新文件。让我们定义一个根记录器并使用它来初始化我们的应用程序级记录器。是时候写一些代码了!导入一些和我们需要的应用程序名称:importloggingimportsysAPP_LOGGER_NAME='MyAwesomeApp'我们将在app.py中调用的函数:)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)iffile_name:fh=logging.FileHandler(file_name)fh.setFormatter(formatter)logger.addHandler(fh)returnlogger我们将使用预定义的DEBUG级别定义记录器并使用Formatter构造来记录消息。然后我们将其分配给流处理程序以将消息写入控制台。接下来,我们还确保包含一个文件,我们可以在其中额外存储所有日志消息,这是通过记录FileHandler来完成的。最后,我们返回记录器。此时需要另一个函数,它将确保我们的模块可以在需要时调用记录器。定义一个get_logger函数。defget_logger(module_name):returnlogging.getLogger(APP_LOGGER_NAME).getChild(module_name)另外,为了将这个模块作为一个包来使用,我们可以选择创建一个名为logger的文件夹,并将这个文件放入其中。如果我们这样做,我们还需要在文件夹中包含___init__.py文件,然后执行from.loggerimport*以确保我们可以从包中导入模块,现在需要完成主要设置!设置我们的模块级日志记录可以通过一个简单的模块来完成,以测试我们的记录器以更好地了解模板。让我们将其定义为一个简单的module.py。importloggerlog=logger.get_logger(__name__)defmultiply(num1,num2):#justmultiplytwonumberslog.debug("Executingmultiplyfunction.")returnnum1*num2该模块现在可以访问记录器,并且应该显示一条带有适当模块名称的消息。让我们现在测试!运行我们的脚本并测试记录器现在,我们构建app.py。importloggerlog=logger.setup_applevel_logger(file_name='app_debug.log')importmymodulelog.debug('Callingmodulefunction.')mymodule.multiply(5,2)log.debug('Finished.')现在,验证您的目录是否包含以下文件:项目文件夹最后,只需通过以下方式运行脚本:python3app.py您应该得到类似于以下的输出,并且您的目录结构也应该更改为包含新的日志文件,继续检查其内容!日志文件出现!以上我们成功构建了Python日志库。
