python你必须熟悉的包:logging日志模块

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在我们的python项目中,log日志是一个必不可缺的模块。我们需要将一些重要的运行数据保存下来,方便后期的问题排查。通常来说我们会将log保存至文件中,再进行后续的归档和查阅。python保存log用到最多的工具就是logging模块了,这里介绍下logging的使用吧。

前言

在我们的python项目中,log日志是一个必不可缺的模块。我们需要将一些重要的运行数据保存下来,方便后期的问题排查。通常来说我们会将log保存至文件中,再进行后续的归档和查阅。python保存log用到最多的工具就是logging模块了,这里介绍下logging的使用吧。

logging安装及简单使用

直接输入 pip install logging安装。 来个最简单的使用例子:

importlogginglogging.info("hello")
复制代码

配置项

配置logging的方式主要有3种:

  1. 使用ini文件配置
  2. 使用字典或JSON文件配置
  3. 直接通过源码配置

通常来说,因为源码配置的方式方便封装和自定义,因此我们多采用第3种方式来配置。

日志级别

日志的输出默认有以下几个级别:

级别 数值
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOSET 0
在生产项目中,一般我们只保存INFO以上级别的输出。

关键概念

主要的处理器有:

  • Logger记录器:暴露了应用程序代码直接使用的接口
  • Handler处理器:将日志落地到哪里的设置
  • Filter过滤器:提供更细的粒度控制输出哪些日志
  • Formatter格式化器:日志输出格式的设置

Handler处理器

常用的Handler处理器有StreamHandler、FileHandler、NullHandler。 项目中多使用FileHandler,示例:

logger = logging.getLogger()
filename = "log.log"
fileHandler = logging.FileHandler(filename, mode='a')
复制代码

在实际开发中,有些日志生成速度很快,如果日志都写到一个文件中,后续日志查询效率会大大降低。因此我们需要对日志文件进行切割。

logging模块支持按照时间切割、按照文件切割。

按照时间切割TimedRotatingFileHandler示例
logger = logging.getLogger()
file_name = "log.log"
timeHandler = logging.handlers.TimedRotatingFileHandler(
   file_name,
   when='D',  # 按照什么维度切割, S:秒,M:分,H:小时,D:天,W:周
   interval=1, # 多少天切割一次
   backupCount=10  # 保留几天
)
# 设置log文件后缀
timeHandler.suffix = "%Y-%m-%d.log"
logger.addHandler(timefilehandler)
复制代码
按照文件切割RotatingFileHandler示例
logger = logging.getLogger()
file_name = "log.log"
fileHandler = logging.handlers.RotatingFileHandler(
   file_name,
   maxBytes=300*1024*1024, # 当文件达到多大时切割,这里设置300M
   backupCount=10  # 保留几个log文件
)
# 设置log文件后缀
logger.addHandler(fileHandler)
复制代码

Formatter格式化器

使用Formatter可设置日志的输出格式,用法 formatter = logging.Formatter(fmt=None, datefmt=None) format格式释义:

  • %(levelno)s: 打印日志级别的数值
  • %(levelname)s: 打印日志级别名称
  • %(pathname)s: 打印当前执行程序的路径
  • %(filename)s: 打印当前执行程序名称
  • %(funcName)s: 打印日志的当前函数
  • %(lineno)d: 打印日志的当前行号
  • %(asctime)s: 打印日志的时间
  • %(thread)d: 打印线程id
  • %(threadName)s: 打印线程名称
  • %(process)d: 打印进程ID
  • %(message)s: 打印日志信息

示例:

formatter = logging.Formatter(
    fmt='%(asctime)s | %(name)s | %(levelname)s | %(message)s', 
    datefmt='%Y-%m-%d %H:%M:%S'
)
复制代码

打印一个看看:

$ 2022-08-19 17:45:17 | test | INFO | 测试log
复制代码

配置示例

import logging
import logging.handlers
logger = logging.getLogger('test')
# 设置日志等级
logger.setLevel(logging.INFO)
# 创建文件处理器
log_file_path = "./log.log"
fileHandler = logging.handlers.RotatingFileHandler(
   log_file_path,
   maxBytes=300*1024*1024, 
   backupCount=10  
)
# 格式化输出设置
formatter = logging.Formatter('%(asctime)s|%(name)s | %(levelname)s | %(message)s')
fileHandler.setFormatter(formatter)
logger.addHandler(fileHandler)
# 测试
logger.info("info msg")
复制代码

小结

logging包是python使用最多的日志模块,我们在使用时,根据自身需要来自定义配置。我们在一些日志查询高频的情景下,可结合其他工具比如elasticsearch、kibana等来快速查询。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
27天前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
235 7
|
1月前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
202 0
|
1月前
|
JSON 算法 API
Python中的json模块:从基础到进阶的实用指南
本文深入解析Python内置json模块的使用,涵盖序列化与反序列化核心函数、参数配置、中文处理、自定义对象转换及异常处理,并介绍性能优化与第三方库扩展,助你高效实现JSON数据交互。(238字)
266 4
|
28天前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
201 0
|
29天前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
148 0
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
3481 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
6月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
766 54
|
11月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
329 9
|
9月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
754 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log