日志-基础用法
1. 官方文档
概述:
logging.getLogger(name)- 模块级别函数,具备层级关系;
- 用于获取或者创建日志记录器;
- 可以传入的属性
- name
- level
- parent
- propagate
- handlers
- 日志级别
- NOTSET
- DEBUG
- INFO
- WARNING
- ERROR
- CRI
- 记录器对象
- 处理器对象
- 格式器对象
- 过滤器对象
- LoggerAdapter对象
2. Python Logging使用指南
logging与print区别
print 语句用于向 stdout(标准输出)写入有用的信息或程序需要输出的信息。然而 Logging 将这些信息写入 stderr(标准错误输出)。
配置logger(记录器)参数
1 | |
- 向 program.log 文件输出日志
- filemode=’w’ 表示需要打开一个新文件并覆盖原来的内容;
- 该参数默认设置为 ‘a’,此时会打开相应文件,并追加日志内容;
- 当设置 level 为 INFO ,程序就不会输出 DEBUG 级别的日志。
- 需要设置 ‘verbose=debug’ 才能获取一些debug参数。日志等级默认为 INFO 。
创建日志处理器
1 | |
- 通过名称获取到一个 Logger。以此可以在程序的其他任意地方使用同一个 Logger。
- 把全局的 Logging 等级设为最低的 DEBUG ,这样我们就可以在其他日志处理器中设置任意日志等级。
- 创建两个日志处理器,分别用于 console 和 file 形式的输出,并设置各自的日志等级。这可以减少控制台输出的开销,转而在文件中输出。这方便了以后的调试。
console_handler = logging.StreamHandler()- 创建标准输出处理器;
- 默认输出到 sys.stderr(控制台错误流)
file_handler = logging.FileHandler('file.log', mode='w')- 创建文件处理器;
logger.addHandler(console_handler)- 将创建的处理器绑定到记录器。记录器可以绑定多个处理器;
- 记录器处理
- 比较日志级别与记录器级别;
- 所有≥10的消息会被接收
- 处理器分发
- 消息发送到所有处理器
console_handler只处理 ≥ INFO(20)的消息;file_handler处理所有 ≥ DEBUG(10)的消息
- 最终输出
- DEBUG 消息 → 仅写入 file.log
- INFO 消息 → 同时输出到控制台和 file.log
日志处理器是什么?
日志处理器(Handler)是一个核心组件,负责将日志记录(LogRecord)发送到指定的目的地。简单来说,日志处理器决定了日志的去向和输出方式。
- 输出目的地管理:决定日志输出到哪里(控制台、文件、网络等)
- 级别过滤:可以单独设置处理器的日志级别
- 格式控制:通过关联的格式化器(Formatter)控制日志格式
- 消息过滤:可添加自定义过滤器(Filter)进行更复杂的控制
常见处理器类型:
- StreamHandler
- FileHandler
- RotatingFileHandler
- TimedRotatingFileHandler
- SMTPHandler
- SysLogHandler
处理器方法:
- 设置日志级别
handler.setLevel(logging.INFO)
- 设置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')handler.setFormatter(formatter)
- 添加过滤器
handler.addFilter(MyFilter())
输出日志格式化
1 | |
3. Python的日志工具logging
3.1 基本概念
- 日志记录器(Logger)
- 是程序中用于产生日志信息的对象,通过
logging.getLogger(name)获取,日志记录器可以有多个,通过name来区分;
- 是程序中用于产生日志信息的对象,通过
- 处理器(Handler)
- 日志记录器并不直接将日志信息输出到目标位置(如控制台或文件),它们将日志传递给处理器。处理器决定了日志输出的具体位置;
StreamHandler: 将日志输出到控制台;FileHandler: 将日志写入文件RotatingFileHandler: 将日志写入文件,但会根据大小进行轮转TimedRotatingFileHandler: 根据时间进行轮转
- 格式器(Formatter)
- 格式器决定了日志信息的具体输出格式。可以包含时间戳、日志级别、日志消息等内容。格式器通过
logging.Formatter(fmt)创建。
- 格式器决定了日志信息的具体输出格式。可以包含时间戳、日志级别、日志消息等内容。格式器通过
- 日志级别(Level)
- DEBUG: 调试信息,最详细的日志级别
- INFO: 普通信息,不用于调试
- WARNING: 警告信息,表示可能发生的问题
- ERROR: 错误信息,表示程序遇到了问题
- CRITICAL: 严重错误,程序可能无法继续运行
- 过滤器(Filter)
- 用于更精细地控制哪些日志记录可以通过处理器。例如,可以根据模块名或日志级别来过滤日志。
3.2 基本使用
3.2.1 简单日志输出
使用 logging.basicConfig 可以快速配置日志系统,定义日志的格式、日志级别等。
1 | |
上述代码,会在控制台输出:
1 | |
3.2.2 自定义处理器
1 | |
上述代码,会创建一个处理器,并将ERROR级别及以上日志,输出到app.log文件中;
3.2.3 日志轮转
为了防止日志文件无限增长,可以使用 RotatingFileHandler 实现日志轮转。比如,当日志文件达到一定大小时创建一个新文件。
1 | |
3.3.4 基于时间的日志轮转
使用 TimedRotatingFileHandler 可以按照时间间隔进行日志轮转。
1 | |
日志-基础用法
http://example.com/2025/08/11/Python/logging/