当前位置: 首页 > news >正文

python logging 详解

python logging 详解

  • 1. 导入logging模块
  • 2. 配置日志记录器
  • 3. 记录日志消息
  • 4. 自定义日志记录器
  • 5. 日志轮换
  • 6. 日志过滤器
  • 7. 日志异常跟踪
  • 8. 日志输出到控制台和文件
  • 9. 使用配置文件
  • 10. 使用第三方库
  • 11. format格式详解
  • 12. 总结

Python的logging模块提供了灵活的日志记录功能,可以记录各种级别的日志消息,并可以将日志消息输出到文件、控制台、网络等不同的位置。

下面是Python logging模块的详细使用方法:

1. 导入logging模块

import logging

2. 配置日志记录器

可以通过BasicConfig()方法来配置日志记录器的基本属性,例如日志级别、输出格式、输出位置等。

logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(levelname)s %(message)s',filename='myapp.log',filemode='w')

其中:

  • level:设置日志级别,可以设置为DEBUG、INFO、WARNING、ERROR、CRITICAL。
  • format:设置日志输出格式,可以自己定义输出格式,例如’%(asctime)s %(levelname)s %(message)s’,表示输出时间、日志级别和消息内容。
  • filename:设置日志输出文件名,如果不设置则默认输出到控制台。
  • filemode:设置日志输出文件的打开模式,可以设置为’w’表示覆盖写,'a’表示追加写。

3. 记录日志消息

可以使用logging模块提供的不同方法来记录不同级别的日志消息,例如:

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

4. 自定义日志记录器

可以通过Logger类来自定义日志记录器,例如:

logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler('myapp.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')

其中:

  • getLogger():获取日志记录器,可以设置记录器名称。
  • setLevel():设置日志级别。
  • FileHandler():设置日志输出位置,可以设置输出文件名。
  • Formatter():设置日志输出格式。
  • addHandler():添加处理器。

5. 日志轮换

可以使用logging模块提供的RotatingFileHandler或TimedRotatingFileHandler类来实现日志轮换,例如:

handler = logging.handlers.RotatingFileHandler('myapp.logmaxBytes=1024*1024, backupCount=5)
handler.setFormatter(formatter)
logger.addHandler(handler)

其中:

  • RotatingFileHandler():创建日志轮换处理器,可以设置最大文件大小和备份数量。
  • maxBytes:设置日志文件最大大小,超过这个大小就会自动创建新的日志文件。
  • backupCount:设置备份数量,超过这个数量就会删除最早的日志文件。

TimedRotatingFileHandler类可以按照时间轮换日志文件,例如:

handler = logging.handlers.TimedRotatingFileHandler('myapp.log', when='midnight', backupCount=5)
handler.setFormatter(formatter)
logger.addHandler(handler)

其中:

  • TimedRotatingFileHandler():创建按时间轮换的日志处理器。
  • when:设置轮换时间,可以设置为’midnight’、‘H’、'M’等不同的时间间隔。

6. 日志过滤器

可以通过Filter类来设置日志过滤器,只有符合条件的日志消息才会被记录,例如:

class MyFilter(logging.Filter):def filter(self, record):return 'important' in record.getMessage()handler = logging.FileHandler('myapp.log')
handler.addFilter(MyFilter())
handler.setFormatter(formatter)
logger.addHandler(handler)logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is an important warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')

其中:

  • Filter():创建日志过滤器。
  • filter():实现过滤器的逻辑,返回True表示记录该日志消息,返回False表示忽略该日志消息。

7. 日志异常跟踪

可以通过exc_info参数来记录异常信息,例如:

try:raise ValueError('This is an exception message')
except ValueError:logger.error('Exception occurred', exc_info=True)

其中:

  • exc_info=True:记录异常信息,包括异常类型、异常消息和异常堆栈。

以上就是Python logging模块的详细使用方法,通过灵活配置和使用,可以实现各种不同场景下的日志记录和管理。

8. 日志输出到控制台和文件

在默认情况下,日志信息只会输出到文件中,如果需要同时输出到控制台,可以添加StreamHandler处理器,例如:

import syshandler = logging.StreamHandler(sys.stdout)
handler.setFormatter(formatter)
logger.addHandler(handler)

其中:

  • StreamHandler():创建输出到控制台的处理器,可以设置输出流。
  • sys.stdout:设置输出流为标准输出。

9. 使用配置文件

可以通过配置文件来设置日志记录器的属性,例如:

[loggers]
keys=root,sampleLogger[handlers]
keys=consoleHandler,fileHandler[formatters]
keys=simpleFormatter[logger_root]
level=DEBUG
handlers=consoleHandler,fileHandler[logger_sampleLogger]
level=DEBUG
handlers=fileHandler
qualname=sampleLogger
propagate=0[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('myapp.log', 'w')[formatter_simpleFormatter]
format=%(asctime)s %(levelname)s %(message)s
datefmt=%Y-%m-%d %H:%M:%S

其中:

  • loggers:设置日志记录器的名称。
  • handlers:设置日志处理器的名称。
  • formatters:设置日志格式化器的名称。
  • logger_*:设置日志记录器的属性,例如日志级别、处理器、传递性等。
  • handler_*:设置日志处理器的属性,例如处理器类型、日志级别、格式化器等。
  • formatter_*:设置日志格式化器的属性,例如输出格式、时间格式等。

可以通过fileConfig()方法来加载配置文件,例如:

import logging.configlogging.config.fileConfig('logging.conf')logger = logging.getLogger('sampleLogger')logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')

10. 使用第三方库

除了Python自带的logging模块之外,还有一些第三方库可以实现更多的功能和扩展,例如:

  • loguru:提供了更加灵活和方便的日志记录方式。
  • structlog:提供了更加可定制化和扩展性的日志记录方式。
  • coloredlogs:提供了彩色输出和更加易读的日志信息。
  • logbook:提供了更加高效和线程安全的日志记录方式。

这些第三方库都有其自己的特点和优势,可以根据具体需求选择适合的库来实现日志记录和管理。

11. format格式详解

logging模块中的format参数用于设置日志的格式化输出方式,可以自定义输出的内容和格式。下面是format参数的详解:

  • %(asctime)s:日志记录时间,格式为“年-月-日 时:分:秒,毫秒”。
  • %(name)s:日志记录器的名称。
  • %(levelname)s:日志级别名称。
  • %(message)s:日志消息内容。
  • %(pathname)s:当前执行代码的路径。
  • %(filename)s:当前执行代码的文件名。
  • %(funcName)s:当前执行函数的名称。
  • %(lineno)d:当前执行代码的行号。
  • %(thread)d:当前执行线程的ID。
  • %(threadName)s:当前执行线程的名称。
  • %(process)d:当前执行进程的ID。
  • %(processName)s:当前执行进程的名称。

例如,设置日志格式为’%(asctime)s %(levelname)s %(message)s’,表示输出时间、日志级别和消息内容。

还可以通过添加格式控制符来进一步定制输出格式,例如:

  • %(levelname)-8s:设置日志级别名称的宽度为8个字符,左对齐。
  • %(message).50s:设置日志消息内容的最大宽度为50个字符,超过部分截断。
  • %(asctime)s,%(msecs)03d:设置日志记录时间的毫秒部分为3位数字,例如“2021-09-23 10:23:45,123”。
  • %(filename)s:%(lineno)d:设置当前执行代码的文件名和行号,例如“test.py:20”。

通过灵活使用格式控制符,可以实现各种不同的输出格式和显示效果,方便日志记录和查看。

12. 总结

Python的logging模块提供了灵活的日志记录功能,可以记录各种级别的日志消息,并可以将日志消息输出到文件、控制台、网络等不同的位置。通过灵活配置和使用,可以实现各种不同场景下的日志记录和管理。在实际应用中,需要根据具体需求选择合适的日志记录方式和工具,以方便运维和调试。

相关文章:

python logging 详解

python logging 详解1. 导入logging模块2. 配置日志记录器3. 记录日志消息4. 自定义日志记录器5. 日志轮换6. 日志过滤器7. 日志异常跟踪8. 日志输出到控制台和文件9. 使用配置文件10. 使用第三方库11. format格式详解12. 总结Python的logging模块提供了灵活的日志记录功能&…...

( “树” 之 DFS) 687. 最长同值路径 ——【Leetcode每日一题】

687. 最长同值路径 给定一个二叉树的 root ,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。 两个节点之间的路径长度 由它们之间的边数表示。 示例 1: 输入:root [5,4,5,1,1,5] 输出&…...

Elasticsearch解决不能修改索引、字段问题解决方案

问题1: 由于es索引不能删除,不能修改,在不影响原数据的情况下,并且生产服务不停机的情况下,怎么修改索引,并保留原索引内的数据? 基于kibanna的dev Tools执行参数,淘汰postman&…...

面试官在线改简历 | 只有6秒!程序员简历这样写才能抓住科技公司大佬的眼球

其实每一份简历 每一个瑞库特 可能也就平均花6秒钟的时间看一看 来进行一个快速的筛选 一份好的简历到底应该长什么样 同时呢在我们写简历的过程当中 应该避免什么样子的错误和误区 那我们今天呢来聊聊这个简历的事 大家知道 每次到了招聘高分期啊这些大的公司 像谷歌Facebook…...

IM即时通讯-7-如何设计通知提醒

本文大纲 本文从为什么做通知提醒, 以及如何设计通知提醒, 以及如何衡量通知提醒三方面解释了如何设计通知提醒。 对于重点的如何设计通知提醒, 通过拆分前台和后台, 前台采用自建或者二方通道, 后台采用厂商信令通道…...

赛狐ERP | 亚马逊选品方法与策略详解:如何挑选最优质的产品?

亚马逊作为全球电商巨头,其产品种类之丰富也是无人能及。然而,在如此繁杂的商品体系下,如何选品成为了摆在商家面前的一道难题。本文将从亚马逊选品的目标、方法、策略三个方面进行详细介绍。 一、选品的目标 在进行选择之前,必…...

【GCU体验】基于PyTorch + GCU跑通ResNet50模型并测试GCU性能

一、环境 地址:启智社区:https://openi.pcl.ac.cn/ 二、计算卡介绍 云燧T20是基于邃思2.0芯片打造的面向数据中心的第二代人工智能训练加速卡,具有模型覆盖面广、性能强、软件生态开放等特点,可支持多种人工智能训练场景。同时具备灵活的可…...

【机器视觉------标定篇(二)】三点成圆算法(求相机旋转中心)

应用场景 机器视觉项目应用中,相机安装在机器人上,并且需要定位产品返回坐标偏差以及角度偏差。 与九点标定配合使用,实现精准角度补偿。 算法输入 不共线的三点坐标 A(X₁,Y₁) ,B(X₂,Y₂&…...

AUTOSAR E2E详细介绍

E2E概述 E2E(End-To-End)是AUTOSAR为功能安全ISO26262提出的一个安全模块。这里的端(End)并不是指ECU与ECU之间,而是指通信ECU上的SW-C与SW-C之间。 在车载网络中,信息交换通常是从一个ECU发送信号,另一个ECU接收信号。对E2E而言,通常是从源SW-C生成信号,经过RTE(R…...

Dream 主题使用手册 - 基础篇

Dream 主题基于 Halo 博客系统开发,本文将介绍本主题一些功能的使用,文档将持续更新。 一、安装 & 更新 1.1 安装包安装 & 更新 进入主题 Release 界面:https://github.com/nineya/halo-theme-dream/releases 下载主题压缩包 halo…...

WSL下的Kafka开发容器:Docker搭建、API、整合

背景介绍 Kafka是一个分布式流处理平台,可以处理大规模数据流并支持实时数据流的处理。 本文介绍了如何在WSL下使用Docker搭建Kafka容器,并使用Python的kafka-python库和FastAPI框架实现了一个简单的API。同时,还将该服务整合到一个整体的d…...

cv2(OpenCV)下载安装

cv2对应库是OpenCV,官网下载链接:https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 最好下载对应python版本的,通过pip命令安装可能会出现版本过高或者过低的问题,导致import cv2没问题,但是内部函数无法调用。 …...

【剑指 offer】旋转数组的最小数字

✨个人主页:bit me👇 ✨当前专栏:算法训练营👇 旋 转 数 组 的 最 小 数 字核心考点:数组理解,二分查找,临界条件 描述: 有一个长度为 n 的非降序数组,比如[1,2,3,4,5]…...

GB 9706.1-2020 医用电气设备第1部分:基本安全和基本性能的通用要求-1

这是份什么文件 这是一份中华人民共和国国家标准,具体为GB9706.1—2020,标准适用于医用电气设备,并规定了医用电气设备基本安全和基本性能的通用要求。主要涵盖了医疗电器设备与患者接触的各种要求,包括电气安全、机械防护、防护辐…...

认识C++《共、枚、指1》

目录 前言: 1.共用体的基本知识 2.匿名共用体 3.枚举 3.1设置枚举值 3.2枚举的应用场景 3.3枚举变量的取值范围 4.地址和自由存储空间 5.指针的思想 6.指针的声明和初始化 前言: 指针内容比较多,还需要再出一篇。久等了!!我看了我的…...

vim 一键配置

PS:本文是为了以后为了方便,做备忘的,今天用的时候找了半天很麻烦。 vim编辑器一键配置 在非root用户下执行上面的语句即可,不要在root用户下直接安装! 安装的时候需要输入root用户的密码,请找您的服主要一…...

如何成为一名成功的 PHP 开发者

当今的网络应用开发市场,PHP 一直是其中最受欢迎的语言之一,许多优秀的网络应用程序都是由 PHP 开发人员设计和开发的。如果你想成为一名成功的 PHP 开发者,以下是几个关键步骤: 1. 学习基础知识 首先,你需要掌握 PH…...

UHD安装教程

UHD Universal Hardware Driver,即USRP驱动。 UHD,Windows平台安装教程 uhd驱动安装 http://files.ettus.com/binaries/misc/erllc_uhd_winusb_driver.zip 安装LibUSBx http://files.ettus.com/binaries/uhd/latest_release 下载默认C盘 环境配置 将…...

Unity和UE有啥区别?哪个更适合游戏开发

游戏制作软件中最著名的两个游戏引擎是 Unity 和 Unreal Engine。从独立游戏到大型工作室,许多游戏开发商都在使用它们。如果你打算从事游戏行业工作,你肯定曾经问过自己“我的游戏应该使用 Unity 还是 Unreal Engine?” ” 让我们来了解和比…...

红队内网靶场

文章目录开篇介绍靶场介绍靶场下载以及配置Tomcat Get Shell突破DMZ防火墙拿下域内成员机器将内网机器上线到CS使用Adfind侦察子域信息控制子域DCRadmin登录子域进行权限维持(白银票据/ACL)子域bloodhound获取父域信息分析子域Krbtgt密钥创建跨域金票Dcsync父域PTH父域DC准备打…...

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

在rocky linux 9.5上在线安装 docker

前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求&#xff…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...