logging 模块提供了一个方便的 api,用于设置日志记录器。日志记录器将负责处理日志消息并将其写入文件或控制台:
import logging # 创建一个名为 "my_logger" 的日志记录器 logger = logging.getLogger("my_logger") # 设置日志级别为 DEBUG,表示要记录所有级别的日志消息 logger.setLevel(logging.DEBUG)
要记录日志消息,请使用日志记录器提供的 debug()
, info()
, warning()
, error()
或 critical()
方法。每个方法对应一个不同的日志级别:
logger.debug("这是 debug 消息") logger.info("这是 info 消息") logger.warning("这是 warning 消息") logger.error("这是 error 消息") logger.critical("这是 critical 消息")
默认情况下,logging 模块使用简单的日志格式,包括日志级别、时间戳和消息。您可以自定义日志格式以包含其他信息,例如函数名称、行号或进程 ID:
# 使用 %(asctime)s、%(levelname)s 和 %(message)s 占位符自定义日志格式 fORMatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") # 将格式器添加到日志记录器 logger.addHandler(logging.StreamHandler()) logger.addHandler(logging.FileHandler("my_log.log"))
logging 模块支持日志层次结构,其中日志记录器可以具有父级和子级。父级记录器将记录子级记录器中的所有消息:
# 创建一个名为 "parent_logger" 的父级日志记录器 parent_logger = logging.getLogger("parent_logger") # 创建一个名为 "child_logger" 的子级日志记录器 child_logger = logging.getLogger("parent_logger.child_logger") # 设置子级日志记录器的日志级别为 INFO,表示仅记录 info 和更高级别的消息 child_logger.setLevel(logging.INFO) # 父级日志记录器中的消息将传播到子级日志记录器 parent_logger.info("父级日志记录器消息") child_logger.info("子级日志记录器消息")
您可以使用日志过滤器来控制哪些日志消息被记录或传播。过滤器可以基于日志级别、消息内容或其他属性:
# 创建一个过滤器,仅允许记录 error 级别及以上的消息 filter = logging.Filter() filter.filter = lambda record: record.levelno >= logging.ERROR # 将过滤器添加到日志记录器 logger.addFilter(filter)
当日志文件变得过大时,日志轮转可以自动管理和分割日志文件。您可以设置最大日志文件大小或保留一定数量的日志文件:
# 使用 RotatingFileHandler 设置日志轮转,最大日志文件大小为 10MB handler = logging.handlers.RotatingFileHandler("my_log.log", maxBytes=10240000) # 将处理程序添加到日志记录器 logger.addHandler(handler)
logging 模块允许您创建自己的日志句柄,提供更大的灵活性。您可以使用 <strong class="keylink">Socket</strong>Handler
将日志消息发送到远程服务器,或使用 TimedRotatingFileHandler
根据时间间隔而不是文件大小轮转日志文件:
# 创建一个自定义日志句柄,将日志消息发送到远程服务器 handler = logging.handlers.SocketHandler("localhost", 1234) # 将处理程序添加到日志记录器 logger.addHandler(handler)
python logging 模块是一个功能强大且灵活的工具,可以显着提高您程序的日志记录和调试能力。通过了解和使用本指南中介绍的技术,您将能够有效地管理日志、解决问题并确保您的程序稳定可靠地运行。
以上是Python logging 模块:初学者到大师的进阶指南的详细内容。更多信息请关注PHP中文网其他相关文章!