Python 日志详解(logging)

本文详细介绍了Python中的logging模块,包括日志的作用、六个级别、基本配置方法等,并通过示例展示了如何设置日志级别、格式及使用各种组件实现日志的多样输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章已经生成可运行项目,

1 概述

1.1 作用

  • Python 的 logging 模块是一个强大的内置日志记录系统,它提供了灵活的日志记录功能

1.2 日志的6个级别

级别数值描述举例
1NOTEST-
2DEBUG10调试函数调用、变量值
3INFO20一般信息程序入参、执行结果
4WARNING30警告磁盘空间不足、网络连接中断
5ERROR40错误函数调用失败、异常
6CRITICAL50严重错误程序崩溃

注:日志的 数值 越高,日志的 级别 也就越高。

2 基础

2.1 logging:打印日志

import logging

logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')

执行结果:(默认输出 warning 及以上的日志)

在这里插入图片描述

结果说明:

  • 默认日志级别 warning:在默认情况下,只打印 warning 级别及以上的日志,低于该级别以下的日志信息将会被忽略
  • 日志级别修改:可通过 logging.basiConfig 进行调整(下面有介绍)
  • root:日志记录器的名称,会随文件位置的改变而改变

2.2 logging.basicConfig:基础设置

import logging

logging.basicConfig(
    level=logging.DEBUG,  # 修改日志级别
    format='%(asctime)s %(name)s [%(pathname)s line:%(lineno)d] %(levelname)s %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',  # 日期时间格式
    filename='log.txt',  # 日志文件名
    filemode='w'  # 日志模式,如:w:写、a+:追加写 等
)

logger = logging.getLogger(__name__)
logger.debug('debug')
logger.info('info')
logger.warning('warning')
logger.error('error')
logger.critical('critical')

执行结果(log.txt)文件:

2024-01-12 21:24:36 root [E:/01 Python 项目/Demo/D01.py line:10] DEBUG debug
2024-01-12 21:24:36 root [E:/01 Python 项目/Demo/D01.py line:11] INFO info
2024-01-12 21:24:36 root [E:/01 Python 项目/Demo/D01.py line:12] WARNING warning
2024-01-12 21:24:36 root [E:/01 Python 项目/Demo/D01.py line:13] ERROR error
2024-01-12 21:24:36 root [E:/01 Python 项目/Demo/D01.py line:14] CRITICAL critical

2.3 format:常用参数

参数解释
%(name)slogger 的名字
%(asctime)s时间
%(filename)s执行文件名
%(message)s 日志信息
%(pathname)s执行程序的路径名
%(process)d 进程ID
%(thread)d线程ID
%(threadName)s线程名称
%(levelno)s 日志级别的数值
%(levelname)s 日志级别的名称
%(lineno)d调用日志的代码所在行

3 进阶

3.1 logging 四个组成部分

英文名中文名描述
Logger记录器提供程序直接调用的接口,默认名称 root
Handler处理器将记录的日志发送到指定位置(终端 or 文件)
Formatter格式器用于控制日志信息的输出格式
Filter过滤器决定哪些日志被输出

在这里插入图片描述

示例:
① logging 只能单纯的将日志输出到终端 或 文件中
② 若想将日志 同时输出到终端 和 文件中,则需要使用到上述组件,如下

import logging

# 创建记录器
logger = logging.getLogger('my_app')
logger.setLevel(logging.DEBUG)

# 创建控制台处理器并设置级别
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 创建文件处理器并设置级别
file_handler = logging.FileHandler('app.log', mode='w', encoding='UTF-8')
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)

# 记录日志
logger.debug('调试信息')
logger.info('一般信息')
logger.warning('警告信息')
logger.error('错误信息')
logger.critical('严重错误')

3.2 fileConfig:配置日志文件

  • 创建一个配置文件(如 logging.conf):
  • 一般仅修改下列的备注信息即可(复制时,请去掉 # 及其之后的内容
[loggers]
keys=root,sampleLogger

[handlers]
keys=consoleHandler,fileHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_sampleLogger]
level=DEBUG
handlers=fileHandler, consoleHandler  # 输出到 文件, 控制台
qualname=sampleLogger
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('app.log', 'w', 'utf-8')  # 日志文件,模式,编码

[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S

test01.py:读取日志配置文件

import logging.config

# 避免出现格式解析问题
with open('logging.conf', 'r', encoding='utf-8') as f:
    logging.config.fileConfig(f)

logger = logging.getLogger('sampleLogger')
logger.debug('调试信息')
本文章已经生成可运行项目
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼丸丶粗面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值