下面是详细讲解“Python的logging模块基本用法”的完整攻略。
简介
Python的logging模块是Python内置的一个标准库,它提供了一种非常灵活的记录日志信息的方式。使用logging模块可以将对程序的控制台输出、文件输出、邮箱输出进行统一管理,可有效地在开发、测试、部署、运维多个环节中使用,记录各种信息,比如错误信息、调试信息、运行信息等。在Python中,通过导入logging模块,我们可以非常方便地实现日志记录的功能。
logging模块基本用法
Python的logging模块中最基本的四个组件是:
- Loggers:日志记录器,管理所有日志记录的入口,决定哪些日志记录器处理哪些日志消息。
- Handlers:日志处理器,决定将日志记录器发送到哪个输出目标,如输出到控制台、写入到文件、通过 email 发送等。
- Formatters:日志格式化器,决定日志输出的格式。
- Filters:日志过滤器,根据需要对日志记录进行过滤。
下面我们来看看具体的操作方法。
创建日志记录器
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
在上面的代码中,通过logging.getLogger()方法的参数 name 来指定具体的记录器名称,__name__表示使用的是模块的名称。如果导入其他的模块,会显示那个模块的名称。通过设置 logger 的级别为 logging.INFO,可以指定日志记录器最低输出的日志级别为 INFO。
创建日志处理器
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("sample.log")
handler.setLevel(logging.INFO)
在上面的代码中,我们使用了 FileHandler,将日志信息写入文件中。可以根据需求选择其他的 Handler,比如 StreamHandler,ConsoleHandler等。
定义日志输出的格式
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("sample.log")
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
在上面的代码中,我们根据需求定义了日志的输出格式,%s 表示字符串占位符,%(asctime)s 表示输出时间、%(name)s 表示日志记录器的名称、%(levelname)s 表示日志级别、%(message)s 表示输出的日志信息。
添加日志记录器
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("sample.log")
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
在上面的代码中,我们向日志记录器中添加了我们刚才创建的日志处理器和日志格式化器,这样定义的日志记录器就可以将日志信息输出到文件中了。
记录日志
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("sample.log")
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info("This is a sample log.")
在上面的代码中,我们调用 logger 对象上的 info 方法,输出一条日志信息并记录到日志文件中。
示例一:同时输出到控制台和日志文件
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.DEBUG)
fileHandler = logging.FileHandler("sample.log")
fileHandler.setLevel(logging.ERROR)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
consoleHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)
logger.addHandler(consoleHandler)
logger.addHandler(fileHandler)
logger.info("This is a debug log.")
logger.error("This is an error log.")
在上面的代码中,我们首先创建了两个 Handler,一个用于将日志信息输出到控制台,一个用于将日志信息写入到文件中。在 consoleHandler 中设置的日志级别是 DEBUG,fileHandler 中设置的日志级别是 ERROR,这样就可以在控制台看到 debug 级别的日志信息,同时将 error 级别的日志信息记录到文件中。
示例二:使用过滤器实现日志过滤
import logging
class MyFilter(logging.Filter):
def filter(self, record):
return "debug" in record.getMessage()
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
consoleHandler.setFormatter(formatter)
logger.addHandler(consoleHandler)
logger.addFilter(MyFilter())
logger.debug("This is a debug log.")
logger.info("This is an info log.")
logger.warning("This is a warning log.")
在上面的代码中,我们实现了一个自定义的 Log Filter,通过判断记录信息中是否含有 "debug" 字符串,来过滤掉其他级别的信息,只让 debug 级别的信息输出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python的logging模块基本用法 - Python技术站