python:logging 日志模块详解

2023-12-15 14:35:52

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方法的作:

  1. 创建一个root记录器
  2. 设置root的日志级别为warning
  3. 为root记录器添加StreamHandler处理器
  4. 为处理器设置一个简单格式器
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,则该方式将失效,它什么都不做。

文章来源:https://blog.csdn.net/weixin_42046845/article/details/135012725
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。