【Python库专栏】logging - 日志库

logging 日志记录 Python库

    • 1, 类方法
      • 配置
      • 使用
    • 2, 实例方法
      • 基础使用
        • 记录器(Logger)
        • 处理器(Handler)
        • 格式化器(Formatter)
      • 项目开发中常见的使用场景
        • 演示

在我们使用logging的时候,它本身自带了一些对于类自身的一些方法即类方法,还有一些实例方法,在通常情况下我们会使用实例方法。

1, 类方法

配置

使用logging就能实现对日志的记入,首先配置类方法的配置文件

logging.basicConfig(  
	
    level=logging.INFO,  
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",  
    filename = "app.log",  
    filemode = "a",  
    # handlers 为日志处理器,可以设置多个,这里设置了控制台和文件处理器 , 推荐使用 
	handlers=[  
	    logging.FileHandler("app.log"),  
	    logging.StreamHandler()  
	]

使用

logging.debug("This is a debug message")
logging.warning("This is a warning message")  
logging.error("This is an error message")  
logging.critical("This is a critical message")

2, 实例方法

在 Python 的 logging 库中,主要有三个重要组件,分别是记录器(Logger)、处理器(Handler)、格式化器(Formatter),这些是需要进行实例化的实例方法 。

基础使用

记录器(Logger)

它是日志记录的核心组件,用于收集日志信息。可以通过logging.getLogger(name)方法创建,name是记录器的名称,若不指定名称则使用根记录器。记录器有自己的日志级别,当一条日志消息产生时,会将消息的级别与记录器的级别进行比较,只有消息级别高于或等于记录器的级别时,消息才会被处理。

  1. 创建记录器
# 创建一个 name = name 的 记录器
test_logger = logging.getLogger('name')
  1. 配置记录器
# 表示记入的最低水平
test_logger.setLevel(logging.debug)
处理器(Handler)

负责将记录器收集到的日志信息发送到指定的目标,比如控制台、文件、网络等。常见的处理器有StreamHandler(将日志输出到控制台或类似文件的对象)、FileHandler(将日志输出到磁盘文件)等。

处理器要放到记录器中

处理器类型 StreamHandler FileHandler RotatingFileHandler TimedRotatingFileHandler
功能 将日志消息输出到控制台 将日志消息写入文件 当文件达到一定大小后自动轮转日志文件 按照时间间隔轮转日志文件
可选参数 stream(指定输出流,默认是 sys.stderr filename(文件名)、mode(文件打开模式,默认是 'a')、encoding(文件编码方式) filenamemaxBytes(文件最大字节数)、backupCount(备份文件数量)、encoding filenamewhen(时间间隔单位)、interval(时间间隔数量)、backupCount(备份文件数量)、encoding
示例 console_handler = logging.StreamHandler(sys.stdout) file_handler = logging.FileHandler('example.log', mode='w', encoding='utf - 8') rotating_handler = RotatingFileHandler('rotating.log', maxBytes = 1024, backupCount = 3, encoding='utf - 8') timed_rotating_handler = TimedRotatingFileHandler('timed.log', when='D', interval = 1, backupCount = 3, encoding='utf - 8')
  1. 如何添加处理器
logger.addHandler(console_handler)
  1. 配置记录器
console_handler.setLevel(logging.INFO)
file_handler.setLevel(logging.ERROR)
格式化器(Formatter)

用于定义日志信息的输出格式,比如可以指定日志的时间、级别、来源、具体消息等信息以何种样式呈现。

格式化器要放到处理器中

占位符 说明
%(asctime)s 时间(可指定格式)
%(levelname)s 日志级别(DEBUG、INFO等)
%(message)s 日志消息内容
%(name)s 记录器的名称
%(filename)s 当前文件名
%(lineno)d 当前行号
  1. 创建
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
  1. 放入处理器
console_handler.setFormatter(formatter)

项目开发中常见的使用场景

exception

try :  
    1 / 0  
except:  
    logging.exception("An exception occurred")
演示
import logging
from logging.handlers import TimedRotatingFileHandler
# 创建一个日志管理系统
all_logger = logging.getLogger('all')
all_logger.setLevel(logging.DEBUG)

console_handler = logging.StreamHandler()
console_handler.setLevel(logging.ERROR)
file_handler = TimedRotatingFileHandler('E:/ai/flask/gitee_front_end_project/ncst_acmer_management_system/log/all.log' , when='D' , backupCount=90 , encoding='utf-8')
file_handler.setLevel(logging.DEBUG)

formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s - %(lineno)d  - %(name)s - %(message)s")
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

all_logger.addHandler(console_handler)
all_logger.addHandler(file_handler)

你可能感兴趣的:(Python库,python,开发语言)