logging
模块的核心点主要包括以下几个方面:基本配置、日志级别、日志记录器(Logger)、处理器(Handler)、格式器(Formatter)和过滤器(Filter)
当然可以,系统学习 logging
模块的核心点主要包括以下几个方面:基本配置、日志级别、日志记录器(Logger)、处理器(Handler)、格式器(Formatter)和过滤器(Filter)。下面我们详细讲解每个核心点,并提供相应的示例。
1. 基本配置
logging.basicConfig()
是最简单的配置方法,它用于设置日志记录的基本配置。
这种模式相当如是一种简配模式,比较快速,但不够灵活
import logging
logging.basicConfig(
level=logging.INFO, # 设置日志级别
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # 日志格式
filename='app.log', # 日志文件名
filemode='w' # 写入模式,'w' 表示覆盖写,'a' 表示追加写
)
logging.info("这是一个信息日志")
logging.warning("这是一个警告日志")
logging.error("这是一个错误日志")
2. 日志级别
日志级别决定了日志的严重程度,从低到高有:DEBUG
、INFO
、WARNING
、ERROR
、CRITICAL
。在配置时设置的日志级别决定了低于该级别的日志信息不会被记录。
logging.debug("这是调试信息")
logging.info("这是普通信息")
logging.warning("这是警告信息")
logging.error("这是错误信息")
logging.critical("这是严重错误信息")
3. 日志记录器(Logger)
日志记录器是 logging
模块的核心对象,用于记录日志。可以通过 logging.getLogger(name)
创建或获取一个记录器。
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
logger.debug("这是调试信息")
logger.info("这是普通信息")
4. 处理器(Handler)
处理器决定了日志发送到哪里。常用的处理器有 StreamHandler
(输出到控制台)和 FileHandler
(输出到文件)。
# 创建处理器
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler('file.log')
# 设置处理器日志级别
console_handler.setLevel(logging.DEBUG)
file_handler.setLevel(logging.ERROR)
# 将处理器添加到记录器
logger.addHandler(console_handler)
logger.addHandler(file_handler)
5. 格式器(Formatter)
格式器决定了日志的输出格式。通过 logging.Formatter
可以设置日志格式。
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
6. 过滤器(Filter)
过滤器用于对日志进行更细粒度的控制,决定哪些日志应该被记录。
class MyFilter(logging.Filter):
def filter(self, record):
return '关键字' in record.getMessage()
logger.addFilter(MyFilter())
logger.info("这是一个包含关键字的信息")
logger.info("这是一条普通信息")
综合示例
综合以上内容,下面是一个完整的示例,展示了如何配置和使用 logging
模块:
这种模式就比较自由,配置灵活。
import logging
# 创建记录器
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# 创建处理器
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler('app.log')
# 设置处理器日志级别
console_handler.setLevel(logging.DEBUG)
file_handler.setLevel(logging.ERROR)
# 创建格式器并设置给处理器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
# 将处理器添加到记录器
logger.addHandler(console_handler)
logger.addHandler(file_handler)
# 添加过滤器
class MyFilter(logging.Filter):
def filter(self, record):
return '关键字' in record.getMessage()
logger.addFilter(MyFilter())
# 记录日志
logger.debug("这是调试信息")
logger.info("这是包含关键字的信息")
logger.warning("这是警告信息")
logger.error("这是错误信息")
logger.critical("这是严重错误信息")
标签:logging,file,handler,处理器,模块,日志,logger
From: https://www.cnblogs.com/babyfengfjx/p/18215112