python:logging 日志模块详解
python.logging
用标准库logging模块记录生成的日志,有日志的具体时间、日志发生的模块、有日志级别和日志的具体内容等等
参考:
https://zhuanlan.zhihu.com/p/476549020?utm_id=0
https://zhuanlan.zhihu.com/p/454463040
日志级别
日志分为5个级别:
- DEBUG
- INFO
- WARNING
- ERROR
- CRITICAL
严重程度的级别依次是DEBUG<INFO<WARNING<ERROR<CRITICAL
默认情况下日志的级别是WARGING, 低于WARING的日志信息都不会输出。
修改日志级别
设置为debug级别后,所有的日志信息都会输出
logging.basicConfig( level=logging.DEBUG)
.
日志记录到文件
logging.basicConfig(filename="test.log", level=logging.INFO)
.
每次重新运行时,日志会以追加的方式在后面, 如果每次运行前要覆盖之前的日志,则需指定 filemode=‘w’, 这个和 open 函数写数据到文件用的参数是一样的。
指定日志格式
logging.basicConfig(format='%(asctime)s %(levelname)s %(name)s %(message)s')
.
输出 : 2021-12-15 07:44:16,547 ERROR root this is error
记录器(logger)
前面介绍的日志记录,其实都是通过一个叫做日志记录器(Logger)的实例对象创建的,每个记录器都有一个名称
(记录器名称可以是任意名称,不过最佳实践是直接用模块的名称当作记录器的名字)
logger = logging.getLogger(__name__)
.
直接使用logging来记录日志时,系统会默认创建 名为 root 的记录器,这个记录器是根记录器。
记录器支持层级结构,子记录器通常不需要单独设置日志级别以及Handler,如果子记录器没有单独设置,则它的行为会委托给父级。
import logging
logging.basicConfig()
logger = logging.getLogger(__name__)
# 设置为DEBUG级别
logger.setLevel(logging.DEBUG)
记录器负责日志的记录,但是日志最终记录在哪里记录器并不关心,交给处理器(Handler)去处理。
处理器(Handler)
Python内置了很多实用的处理器,Handler 提供了4个方法给开发者使用:
- 1、StreamHandler 标准流处理器,将消息发送到标准输出流、错误流
- 2、FileHandler 文件处理器,将消息发送到文件
- 3、RotatingFileHandler 文件处理器,文件达到指定大小后,启用新文件存储日志
- 4、TimedRotatingFileHandler 文件处理器,日志以特定的时间间隔轮换日志文件
import logging
from logging import StreamHandler
from logging import FileHandler
# ========== StreamHandler ==============
stream_handler = StreamHandler()
stream_handler.setLevel(logging.WARNING)
logger.addHandler(stream_handler)
# ========== FileHandler ==============
file_handler = FileHandler(filename="test.log")
file_handler.setLevel(logging.INFO)
logger.addHandler(file_handler)
# =========== 格式器(formatter) ==============
# 创建一个格式器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 作用在handler上
stream_handler.setFormatter(formatter)
# 添加处理器
logger.addHandler(stream_handler)
注:
- 格式器只能作用在处理器上,通过处理器的setFromatter方法设置格式器。
- 一个Handler只能设置一个格式器。是一对一的关系。
- logger 与 handler 是一对多的关系,一个logger可以添加多个handler。
- handler 和 logger 都可以设置日志的等级。
logging.basicConfig 方法
logging.basicConfig方法的作:
- 创建一个root记录器
- 设置root的日志级别为warning
- 为root记录器添加StreamHandler处理器
- 为处理器设置一个简单格式器
logging.basicConfig()
logging.warning("hello")
等价于下述代码:
logger = logging.getLogger("root")
logger.setLevel(logging.WARNING)
handler = StreamHandler(sys.stderr)
logger.addHandler(handler)
formatter = Formatter(" %(levelname)s:%(name)s:%(message)s")
handler.setFormatter(formatter)
logger.warning("hello")
注:
- logging.basicConfig 方法做的事情是相当于给日志系统做一个最基本的配置,方便开发者快速接入使用。
- 它必须在开始记录日志前调用。
- 不过如果 root 记录器已经指定有其它处理器,这时候你再调用basciConfig,则该方式将失效,它什么都不做。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!