python 日志

模块

python的日志模块是logging, 属于标准库,无需自动安装。

日志配置

使用日志模块,一般会先创建一个日志配置文件。配置文件有两种写法, 配置文件包括Loggers(日志记录器)、Handlers(日志处理器)、Filters (日志过滤器)和 Formatters(日志格式化器)。

1.conf文件配置

logging.conf

[loggers]	# 选择日志记录器
keys = root

[handles]	# 选择日志处理器
keys = consoleHandler

[formatters]	# 选择日志格式化器
keys=simpleFormatter

[logger_root]	# 日志记录器, 选择日志输出在哪
level=DEBUG		# 日志等级
handlers=consoleHandler

[handler_consoleHandler]	# 日志处理器, 通过调用不同的class来处理日志
class=StreamHandler		# 输出到标准输出 
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[formatter_simpleFormatter]		# 日志格式化器, 格式化日志输出
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=

日志等级

DEBUG:排查故障时使用的低级别系统信息,通常开发时使用
INFO:一般的系统信息,并不算问题
WARNING:描述系统发生小问题的信息,但通常不影响功能
ERROR:描述系统发生大问题的信息,可能会导致功能不正常
CRITICAL:描述系统发生严重问题的信息,应用程序有崩溃的风险
在配置文件中配置好日志等级后,智慧输出等级高于配置等级的日志。

配置文件使用

在要记录日志的文件

config.fileConfig(配置文件路径)
logger = logging.getLogger(日志名)

2. python字典配置

将配置写在字典中是一种更常见的配置方式。只需要早要记录日志的py文件中写入

logging_config = {
    'version': 1,
    'disable_existing_loggers': False,		# 不使其他日志失效
    'formatters': {		# 日志格式化器
        'default': {
            'datefmt': '%Y-%m-%d %H:%M:%S',
            'format': '%(asctime)s %(levelname)s %(message)s',
        },
    },
    'handlers': {		# 日志处理器
        'console': {		# 标准输出输出
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'default'
        },
        'file': {		# 输出到文件
            'level': 'DEBUG',
            'class': 'logging.handlers.TimedRotatingFileHandler',  # 所使用的处理类,这个类可以固定时间开始新的日志,保存原来的日志
            'formatter': 'default',
            'when': "d",  # 时间单位可以是h, d, m , y
            'interval': 1,		# 单位数量,多长时间开始新的记录
            'backupCount': 30,		# 能保存的最大日志文件数量
            'filename': 文件名
        }
    },
    'loggers': {		# 日志记录器
        'StreamLogger': {
            'handlers': ['console'],	# 所使用的处理器
            'level': 'DEBUG',
        },
        'FileLogger': {
            # 既有 console Handler,还有 file Handler
            'handlers': ['console', 'file'],
            'level': 'DEBUG',
        },
    }
}
# 加载配置
logging.config.dictConfig(logging_config)
# 实例化logger 加载loggers的配置
logger = logging.getLogger("FileLogger")

日志使用

# 通过使用不同的方法记录不同等级的日志
logger.error(日志信息)
logger.info(日志信息)
Python 日志的使用和配置可以从基础配置、高级配置、模块级配置等方面展开。 ### 日志基础与基本配置 Python日志功能可以通过 `logging` 模块实现。基础配置涵盖了日志级别、日志格式等内容。官方文档为 `logging — Python日志记录工具 — Python 3.12.6 文档` [^1]。 ### 模块级别的日志记录器配置 要实现灵活的日志配置策略,让日志记录器根据调用者或运行环境自动调整,可按以下步骤操作: - 定义模块级别的日志记录器:在 Python 文件中定义。 - 检查已有的处理器:在模块级别日志记录器配置时,检查是否已有处理器,即是否已由其他库配置了日志。 - 独立运行时配置默认日志:若没有已有的处理器,则添加默认的日志配置,如输出到控制台 [^2]。 示例代码如下: ```python import logging # 定义模块级别的日志记录器 logger = logging.getLogger(__name__) # 检查是否已有处理器 if not logger.hasHandlers(): # 添加默认的日志配置,输出到控制台 console_handler = logging.StreamHandler() logger.addHandler(console_handler) logger.setLevel(logging.DEBUG) # 示例使用 logger.debug('This is a debug message') ``` ### 高级配置与日志处理器 Python `logging` 模块的高级配置,重点在于使用不同的日志处理器来控制日志的输出位置和方式,同时使用日志格式器让日志信息更直观、易读,还可应用日志过滤器根据自定义规则过滤日志消息,提高日志的可控性和效率 [^3]。 常见的日志处理器如下: - `StreamHandler`:输出日志到流,如控制台。 - `FileHandler`:输出日志到文件。 - `RotatingFileHandler`:按文件大小进行日志分割。 - `TimedRotatingFileHandler`:按时间进行日志分割。 其中,`StreamHandler` 和 `FileHandler` 直接包含在 `logging` 模块中,其他方式包含在 `logging.handlers` 模块中 [^3][^4]。 示例代码使用 `FileHandler`: ```python import logging logger = logging.getLogger(__name__) file_handler = logging.FileHandler('app.log') formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') file_handler.setFormatter(formatter) logger.addHandler(file_handler) logger.setLevel(logging.INFO) logger.info('This is an info message') ``` ### 日志配置文件 使用 `logging.config` 模块可以通过配置文件来配置日志。在配置文件中,`stream` 可指定日志输出目标流,如 `sys.stdout`、`sys.stderr` 以及网络流。需要注意的是,`stream` 和 `filename` 不能同时提供,否则会引发 `ValueError` 异常 [^4][^5]。 示例配置文件 `logging.conf`: ```ini [loggers] keys=root [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [handler_consoleHandler] class=StreamHandler level=DEBUG formatter=simpleFormatter args=(sys.stdout,) [formatter_simpleFormatter] format=%(asctime)s - %(name)s - %(levelname)s - %(message)s ``` 使用配置文件的代码: ```python import logging import logging.config logging.config.fileConfig('logging.conf') logger = logging.getLogger() logger.debug('This is a debug message from config file') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值