logging:用于实现日志记录的模块
logging模块是Python标准库中用于记录日志的模块。它提供了灵活的日志记录系统,允许开发者在应用程序中记录各种级别的日志消息,如调试信息、警告、错误等。logging模块提供了以下主要组件:
- Loggers:日志记录器,用于暴露应用程序代码能直接使用的接口。
- Handlers:处理器,用于将日志记录发送到指定的目的地,如文件、终端或网络套接字。
- Formatters:格式化器,用于指定日志记录的输出格式。
一、常用方法
logger.debug(msg, *args, kwargs):
用于记录调试信息,通常用于诊断问题。只有在日志级别设置为DEBUG或更低时才会输出。
logger.info(msg, *args, kwargs):
用于记录一般信息,通常用于确认程序按预期工作。只有在日志级别设置为INFO或更低时才会输出
logger.warning(msg, *args, kwargs):
用于记录警告信息,表示程序遇到了一些小问题,但仍然可以继续运行。只有在日志级别设置为WARNING或更低时才会输出。
logger.error(msg, *args, kwargs):
用于记录错误信息,表示程序遇到了严重的问题,可能无法继续运行。只有在日志级别设置为ERROR或更低时才会输出。
logger.critical(msg, *args, kwargs):
用于记录严重错误信息,表示程序遇到了非常严重的问题,通常会导致程序终止。只有在日志级别设置为CRITICAL时才会输出。
logger.setLevel(level):
用于设置日志记录的最低严重级别,低于此级别的日志信息将被忽略。例如,设置为logging.INFO后,DEBUG级别的信息将不会被记录。
logger.addHandler(hdlr):
用于给logger添加一个处理器(handler),处理器决定日志信息输出的位置,如控制台、文件等。
logger.removeHandler(hdlr):
用于从logger中移除指定的处理器。
logger.exception(msg, *args, kwargs):
专门用于记录异常信息,通常在异常处理的except块中使用,它会自动记录异常的堆栈信息。
二、使用案例
import logging
import os
# 确保日志目录存在
os.makedirs('./tmp/', exist_ok=True)
# 创建一个logger
logger = logging.getLogger('example_logger')
logger.setLevel(logging.DEBUG)
# 创建一个处理器handler,用于将日志输出到文件
file_handler = logging.FileHandler('./tmp/logging_example.log')
file_handler.setLevel(logging.DEBUG)
# 创建一个格式器formatter,并将其添加到处理器handler中
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
# 将处理器添加到logger中
logger.addHandler(file_handler)
# logging模块中的常用方法函数
logger.debug('这是一个调试信息') # 用于调试
logger.info('这是一个信息') # 用于普通信息输出
logger.warning('这是一个警告') # 用于警告信息
logger.error('这是一个错误') # 用于错误信息
logger.critical('这是一个严重错误') # 用于严重错误信息
# 读取日志文件内容以便展示
with open('./tmp/logging_example.log', 'r') as file:
log_content = file.read()
print(log_content)
# 模拟一个异常并记录
try:
1 / 0
except ZeroDivisionError:
logger.exception('这是一个异常信息')
# 读取日志文件内容以便展示
with open('./tmp/logging_methods_example_with_code.log', 'r') as file:
log_content = file.read()
print(log_content)
三、输出结果
2024-10-31 08:18:24,894 - example_logger - DEBUG - 这是一个调试信息
2024-10-31 08:18:24,905 - example_logger - INFO - 这是一个信息
2024-10-31 08:18:24,993 - example_logger - WARNING - 这是一个警告
2024-10-31 08:18:25,097 - example_logger - ERROR - 这是一个错误
2024-10-31 08:18:25,108 - example_logger - CRITICAL - 这是一个严重错误
Traceback (most recent call last):
File "<string>", line 32, in <module>
ZeroDivisionError: division by zero