【Python】logging模块函数详解和示例

news2024/11/30 5:35:34

在Python中,LOGGER通常是指一个用于记录日志的模块或对象。它可以帮助你在程序中跟踪和记录事件,以便于调试、错误跟踪和日志分析。Python的标准库中包含了一个名为logging的模块,它提供了一个灵活且功能强大的日志记录系统。本文对相应的函数进行详解和示例,以帮助大家理解和使用。

目录

  • 日志级别
    • DEBUG
    • INFO
    • WARNING
    • ERROR
    • CRITICAL
  • logging.getLogger()
  • logger.setLevel()
  • logging.FileHandler()
  • logging.StreamHandler()
  • logging.Formatter()
  • logger.addHandler()
  • 运行示例

首先,需要导入logging模块,以便在你的代码中使用它。

import logging

日志级别

在logging模块中,你可以创建一个或多个日志记录器,然后将它们配置为记录不同级别的消息。
有五个预定义的日志级别,从低到高分别是:DEBUG、INFO、WARNING、ERROR、CRITICAL。每个级别都对应着不同的信息类型和严重程度。

DEBUG

这是最低的日志级别,通常用于输出最详细的信息,包括程序的内部运作细节。这种级别通常只在诊断问题时使用,因为在生产环境中可能会产生大量的日志输出。

INFO

这个级别的日志用于输出一般信息,比如程序的主要事件或状态改变。这是了解系统运行状态的有用工具。

WARNING

当发生可能的问题或潜在的错误时,会使用此级别的日志。例如,如果磁盘空间不足,可能会记录一个警告。虽然这种情况可能会导致问题,但仍然允许程序继续运行。

ERROR

这个级别的日志用于输出错误信息,这些错误信息通常会导致程序的部分功能失效。例如,如果无法连接到数据库,可能会记录一个错误。

CRITICAL

这是最高的日志级别,用于输出极其严重的问题,这些问题可能会导致程序崩溃或无法正常运行。例如,内存溢出或操作系统崩溃等严重问题会记录为严重错误。

这些级别构成了一个大层次结构,意味着如果一个消息被标记为 INFO,那么它包括比它更低级别的所有消息(例如 DEBUG),但不包括比它更高的级别(例如 ERROR)。

你可以通过设置日志记录器的级别来控制哪些消息被记录下来。例如,如果将日志记录器的级别设置为 INFO,那么 INFO 和 DEBUG 级别的消息都会被记录下来,但 WARNING、ERROR 和 CRITICAL 级别的消息则不会。

logging.getLogger()

logging.getLogger() 是 Python 的 logging 模块中的一个函数,它用于获取或创建日志记录器对象。这个对象是用于处理和跟踪程序中事件(例如错误、警告、信息等)的工具。

logging.getLogger(name)

其中 name 是一个字符串,用于区分不同的日志记录器对象。
如果 name 参数为空字符串(""),那么将返回根日志记录器。
如果 name 参数为非空字符串,那么将返回一个具有该名称的日志记录器,
如果该日志记录器不存在,则创建一个新的日志记录器。
import logging

# # 创建一个logger
logger = logging.getLogger('my_logger')

logger.setLevel()

logger.setLevel() 是 Python 的 logging 模块中的一个方法,用于设置 logger 的日志级别。
日志级别决定了 logger 是否记录消息。
日志级别从低到高分别是:DEBUG、INFO、WARNING、ERROR、CRITICAL。如果 logger 的级别设置为 DEBUG,那么它就会记录 DEBUG 及其以上级别的所有消息;如果设置为 INFO,那么就记录 INFO、WARNING、ERROR 和 CRITICAL 消息。依此类推。

import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)  # 设置日志级别为DEBUG

logging.FileHandler()

logging.FileHandler() 是 Python 的 logging 模块中的一个类,它用于将日志消息写入到文件中。你可以使用这个类来创建一个特定的文件处理器,从而将日志消息输出到一个指定的文件中。

logging.FileHandler() 接收两个参数:

filename:要写入的文件名。也可以是文件路径,例如 '/path/to/logfile.log'。
mode:文件打开模式。默认为 'a'(追加模式),也可是 'w'(写入模式)覆盖原有内容,或者 'r'(读取模式)读取原有内容。

logging.StreamHandler()

logging.StreamHandler() 是 Python 的 logging 模块中的一个类,它用于将日志消息输出到指定的流(默认为 sys.stderr)。你可以使用这个类来创建一个特定的流处理器,从而将日志消息输出到特定的流中。

logging.StreamHandler() 不需要任何参数。

logging.Formatter()

logging.Formatter() 是 Python 的 logging 模块中的一个类,它用于定义日志消息的格式。你可以使用这个类来创建一个特定的格式化器,从而定义你希望看到的日志消息格式。

logging.Formatter() 可以接收以下参数:

format:格式字符串,用于定义日志消息的格式。可以包含一些特殊的格式化指令,例如 %m(消息文本)、%n(换行符)、%t(时间戳)等。
datefmt:时间戳的格式化字符串,用于定义时间戳的格式。如果不提供该参数,默认使用 ISO8601 格式。
style:字符串格式化操作符,默认为 '{'(字典样式)和 'r'(原始字符串样式)之一。如果设置为 '{',则可以使用诸如 {asctime} 之类的占位符。如果设置为 'r',则消息将被格式化为原始字符串。

logger.addHandler()

logger.addHandler() 是 Python 的 logging 模块中的一个方法,它用于将一个日志处理器(handler)添加到特定的 logger 中。这个方法使得 logger 能够将日志消息发送到特定的处理器中,以便进行记录、输出或其他处理。

logger.addHandler() 方法接收一个 logging.Handler 对象作为参数。在 Python 的 logging 模块中,有许多不同类型的处理器,包括 StreamHandler(输出到控制台)、FileHandler(输出到文件)、RotatingFileHandler(输出到轮转文件)等等。

运行示例

import logging

# 创建一个logger
logger = logging.getLogger('my_logger')

# 设置全局日志级别为DEBUG
logger.setLevel(logging.DEBUG)

# 创建一个handler,用于写入日志文件
fh = logging.FileHandler('my_logger.log')

# 再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()

# 定义handler的输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 给handler设置输出格式
fh.setFormatter(formatter)
ch.setFormatter(formatter)

# 给logger添加handler
logger.addHandler(fh)
logger.addHandler(ch)

# 记录一条日志
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')

在这个示例中,我们创建了一个 Formatter,它将日志消息的格式定义为包含时间戳、logger名称、日志级别和消息文本的字符串。然后,我们将这个 Formatter 应用到了一个 StreamHandler 上,该 handler 将日志消息输出到控制台。最后,我们记录了一些日志消息,并使用这个 Formatter 对它们进行了格式化。

在这里插入图片描述

**输出内容:**在终端输出相应信息,并在文件夹中创建了一个Logging_ceshi.log的文件,文件内容为:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1290730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

17、XSS——session攻击

文章目录 一、session攻击简介二、主要攻击方式2.1 预测2.2 会话劫持2.3 会话固定 一、session攻击简介 session对于web应用是最重要,也是最复杂的。对于web应用程序来说,加强安全性的首要原则就是:不要信任来自客户端的数据,一定…

Python---面向对象的综合案例

案例1:定义学员信息类,包含姓名、成绩属性,定义成绩打印方法(90分及以上显示优秀,80分及以上显示良好,70分及以上显示中等,60分及以上显示合格,60分以下显示不及格) 学员…

Android--Jetpack--Databinding详解

不经一番寒彻骨,怎得梅花扑鼻香 一,定义 DataBinding, 又名数据绑定,是Android开发中非常重要的基础技术,它可以将UI组件和数据模型连接起来,使得在数据模型发生变化时,UI组件自动更新。是 MVVM 模式在 An…

Path Finder for Mac:超越系统的文件管理利器

Path Finder for Mac是一款卓越的文件管理器,它不仅具备基本的文件浏览、打开、复制和移动等操作功能,还引入了一系列强大的特性,使得用户可以更高效地管理和处理文件。 一、强大的预览功能 Path Finder for Mac支持多种文件格式的预览&…

初级数据结构(二)——链表

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;一&#xff09;——顺序表 | NULL 下一篇-> 1、链表特征 与顺序表数据连续存放不同&#xff0c;链表中每个数据是分开存放的&#xff0c;而且存放的位置尤其零散&#…

Qt进程和线程

一、进程 在设计一个应用程序时,有时不希望将一个不太相关的功能集成到程序中,或者是因为该功能与当前设计的应用程序联系不大,或者是因为该功能已经可以使用现成的程序很好的实现了,这时就可以在当前的应用程序中调用外部的程序来实现该功能,这就会使用到进程。Qt应用程序…

文献阅读:基于改进ConvNext的玉米叶片病害分类

文献阅读&#xff1a;基于改进ConvNext的玉米叶片病害分类 CBAM注意力机制模块&#xff1a; 1&#xff1a;通道注意力模块&#xff0c;对输入进来的特征层分别进行全局平均池化&#xff08;AvgPool&#xff09;和全局最大池化&#xff08;MaxPool&#xff09;&#xff08;两个…

Ubuntu系统使用快速入门实践(六)——Ubuntu深度学习环境配置(1)

Ubuntu系统使用快速入门实践系列文章 下面是Ubuntu系统使用系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 Ubuntu系统使用快速入门实践系列文章总链接 下面是专栏地址&#xff1a; Ubuntu系统使用快速入门实践系列文章专栏 文章目录 Ubuntu系统使用快速…

android studio安装说明

一、安装文件下载&#xff1a; Android studio、SDK、NDK下载&#xff1a; https://developer.android.google.cn/ndk/downloads?hlzh-cn 二、双击android studio 安装文件&#xff0c;开始安装&#xff1a; 三、进入安装界面&#xff0c;点击“next”。 四、点击“next”&…

uni-app 微信小程序之加载行政区图

文章目录 1. 实现效果2. 实现步骤 1. 实现效果 2. 实现步骤 使用三方组件 ucharts echarts 高性能跨全端图表组件页面导入引入的三方组件 组件demo代码 <template><view class"qiun-columns"><view class"cu-bar bg-white margin-top-xs"…

Leetcode刷题笔记题解(C++):BM11 链表相加(二)

思路&#xff1a;先对两个链表进行反转&#xff0c;反转求和注意进位运算&#xff0c;求和完成之后再进行反转得到结果 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ #include <cstddef> class Soluti…

STM32单片机项目实例:基于TouchGFX的智能手表设计(2)UI交互逻辑的设计

STM32单片机项目实例&#xff1a;基于TouchGFX的智能手表设计&#xff08;2&#xff09;UI交互逻辑的设计 目录 一、UI交互逻辑的设计 1.1 硬件平台的资源 1.2 界面切换功能 ​​​​​​​1.3 表盘界面 1.4 运动界面 ​​​​​​​1.6 设置界面 ​​​​​​​1.7 应…

SpringBoot 与Maven ProFile的使用

SpringBoot 与Maven ProFile的使用 目录结构 dev 开发环境 sit 测试环境 prd 正式环境 maven 配置 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>&l…

Linux中的输入输出重定向

目录 1.输出重定向 > 2.追加重定向 >> 3.标准 正确/错误 输出重定向 4.输入重定向 < 5.标准输入 0 1.输出重定向 > 将命令执行之后的结果不打印出来&#xff0c;可以输入在另外一个文件当中。 如&#xff0c;我查看文件a.txt 的前3行&#xff0c;然后不显…

【PyTorch】训练过程可视化

文章目录 1. 训练过程中的可视化1.1. alive_progress1.2. rich.progress 2. 训练结束后的可视化2.1. tensorboardX2.1.1. 安装2.1.2. 使用 1. 训练过程中的可视化 主要是监控训练的进度。 1.1. alive_progress 安装 pip install alive_progress使用 from alive_progress i…

Vue 父传子组件传参 defineProps

defineProps 属性&#xff1a;用于接收父组件传递过来的数据。 注意&#xff1a;如果 defineProps 接收的参数名&#xff0c;和已有变量名相同&#xff0c;就会造成命名冲突。 语法格式&#xff1a; // 无限制 const props defineProps([参数名, 参数名]);// 限制数据类型 …

高德地图vue实现热力图(缩放时展示不同数据)

高德地图插件引入省略。。。 效果图 1.1&#xff1a;初始化时&#xff0c;按省进行统计 1.2&#xff1a;地图放大一定程度时&#xff0c;按市进行统计 2. 同一个经纬点可支持展示两个数据 代码实现 <template><div class"infringement-map"><di…

西南科技大学C++程序设计实验七(继承与派生二)

一、实验目的 1. 掌握多继承程序设计 2. 掌握虚基类编程 3. 拓展学习可视化程序设计中的继承与派生应用 二、实验任务 重点:掌握虚基类的定义与实现,拓展其功能。 阅读分析、完善程序。下面程序(1)与程序(2)分别是没有使用虚基类和使用虚基类的代码,其中A是最上层基…

MA营销自动化如何助力商家实现精准营销?

惟客数据 MAP 是一个跨渠道和设备的自动化营销平台&#xff0c;允许接触点编排个性化旅程&#xff0c;通过短信、社交推送等方式为您的客户创建无缝的个性化体验&#xff0c;加强客户关系并赢得忠诚度。可与惟客数据CDP 产品无缝配合使用&#xff0c;通过数据驱动做出更实时&am…

javaee实验:文件上传及拦截器的使用

目录 文件上传ModelAttribute注解实验目的实验内容实验过程项目结构编写代码结果展示 文件上传 Spring MVC 提供 MultipartFile 接口作为参数来处理文件上传。 MultipartFile 提供以下方法来获取上传的文件信息&#xff1a;  getOriginalFilename 获取上传的文件名字&#x…