Python 的 logging
模块提供了一个灵活的记录日志的框架,它允许记录消息到不同的目的地,如控制台、文件、网络等。下面是一些基本的示例代码,展示如何使用 logging
模块:
基本配置和日志记录
import logging
# 配置基本的日志记录
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s')
# 记录不同级别的日志
logging.debug("这是一个 debug 级别的日志")
logging.info("这是一个 info 级别的日志")
logging.warning("这是一个 warning 级别的日志")
logging.error("这是一个 error 级别的日志")
logging.critical("这是一个 critical 级别的日志")
配置日志记录到文件
import logging
# 配置日志记录到文件
logging.basicConfig(filename='example.log', level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
# 记录日志到文件
logging.info("这条日志信息将被记录到文件")
使用日志记录器(Logger)和处理器(Handler)
Logger
对象是核心组件之一,负责实际记录日志消息。以下是关于Logger
对象的详细介绍:
创建Logger对象
可以通过logging.getLogger()
方法来创建一个Logger
对象。如果提供一个名称参数,它将返回一个具有该名称的Logger
对象;如果不提供名称,它将返回一个名为root
的Logger
对象。
import logging
# 创建一个名为 'my_logger' 的 Logger 对象
logger = logging.getLogger('my_logger')
Logger的层级结构
Logger
对象可以形成一个层级结构,类似于文件系统中的目录结构。例如,名为'a.b'
的Logger
是名为'a'
的Logger
的子Logger
。这种层级结构有助于管理和配置日志记录。
# 创建一个名为 'a' 的 Logger 对象
logger_a = logging.getLogger('a')
# 创建一个名为 'a.b' 的 Logger 对象
logger_a_b = logging.getLogger('a.b')
设置日志级别
Logger
对象有一个日志级别属性,用于控制哪些日志消息会被处理。常见的日志级别包括:
DEBUG
INFO
WARNING
ERROR
CRITICAL
可以使用setLevel()
方法来设置Logger
对象的日志级别。
logger.setLevel(logging.DEBUG)
添加和移除Handler
Logger
对象可以有多个Handler
对象,用于处理日志消息。Handler
对象负责将日志消息发送到不同的目的地,例如控制台、文件、网络等。
你可以使用addHandler()
方法来添加Handler
对象,使用removeHandler()
方法来移除Handler
对象。
# 创建一个 StreamHandler,用于将日志消息输出到控制台
console_handler = logging.StreamHandler()
# 将 StreamHandler 添加到 Logger 对象
logger.addHandler(console_handler)
# 移除 StreamHandler
logger.removeHandler(console_handler)
记录日志消息
Logger
对象提供了多个方法来记录不同级别的日志消息,例如:
debug()
info()
warning()
error()
critical()
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
配置Logger:通过代码
可以使用addHandler()
方法来添加Handler
对象,使用removeHandler()
方法来移除Handler
对象。
import logging
# 创建一个日志记录器
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG) # 设置日志记录的最低级别
# 创建一个控制台处理器,并设置级别为 INFO
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
# 创建一个文件处理器,并设置级别为 DEBUG
file_handler = logging.FileHandler('my_debug.log')
file_handler.setLevel(logging.DEBUG)
# 定义日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s