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

在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的文件,文件内容为:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

unity 2d 入门 飞翔小鸟 下坠功能且碰到地面要停止 刚体 胶囊碰撞器 (四)

1、实现对象要受重力 在对应的图层添加刚体 改成持续 2、设置胶囊碰撞器并设置水平方向 3、地面添加盒状碰撞器 运行则能看到小鸟下坠并落到地面上

【南京站-EI会议征稿中】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)

第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024) 2024 3rd International Conference on Cyber Security, Artificial Intelligence and Digital Economy 第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024&…

基于高德API实现网络geoJSON功能(突出省份)

代码实现&#xff1a; <script>// 3、初始化一个高德图层const gaode new ol.layer.Tile({title: "高德地图",source: new ol.source.XYZ({url: http://wprd0{1-4}.is.autonavi.com/appmaptile?langzh_cn&size1&style7&x{x}&y{y}&z{z},w…

SpringBoot 启动加载器解析

计时器介绍 启动加载器实战 实现方式1 实现CommandLineRunner接口重写run方法通过Order进行排序 示例: Component Order(1) public class FirstCommandlineRunner implements CommandLineRunner {Overridepublic void run(String... args) throws Exception {System.out.pr…

Windows server 部署iSCSI共享磁盘搭建故障转移群集

在域环境下&#xff0c;在域控制器中配置iSCSI服务&#xff0c;配置共享网络磁盘&#xff0c;在节点服务器使用共享磁盘&#xff0c;并在节点服务器中搭建故障转移群集&#xff0c;实现故障转移 环境准备 准备3台服务器&#xff0c;配置都是8g2核&#xff0c;50g硬盘&#xf…

前端实现检索文本高亮实现

文章目录 一、前言二、实现三、最后 一、前言 使用搜索引擎时的搜索结果高亮&#xff0c;搜索文本在查询出来的结果内高亮显示&#xff0c;这种在全文检索应该很常见 二、实现 看了下百度检索的实现&#xff0c;是给内容加上了em标签&#xff0c;然后给em标签设置颜色&#x…

记录 | vscode pyhton c++调试launch.json配置

下面提供 vscode 中 python 和 c 调试配置的 launch.json (好用&#xff0c;已用好几年&#xff0c;建议收藏) {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387&qu…

WPF仿网易云搭建笔记(0):项目搭建

文章目录 前言项目地址项目Nuget包搭建项目初始化项目架构App.xaml引入MateralDesign资源包 项目初步分析将标题栏去掉DockPanel初步布局 资源字典举例 结尾 前言 最近在找工作&#xff0c;发现没有任何的WPF可以拿的出手的工作经验&#xff0c;打算仿照网易云搭建一个WPF版本…

计网实验7

解决&#xff1a;路由器用rip连接&#xff0c;主机通过域名访问&#xff0c;主机之间发送电子邮件 实验步骤 1.搞好部件 2.配好两台主机的ip,掩码&#xff0c;网关 3.连接一下两台主机&#xff0c;由于两台路由器没有连接&#xff0c;所以两台主机也无法连通&#xff0c;丢包率…

php操作数据库,用wampserver工具

php操作数据库&#xff0c;用wampserver工具 打开wampserver数据库可视化&#xff0c;创建表格&#xff0c;插入数据 DROP TABLE IF EXISTS user; CREATE TABLE IF NOT EXISTS user (user_Id int NOT NULL AUTO_INCREMENT COMMENT 用户编号,user_Name varchar(20) CHARACTER S…

【华为数据之道学习笔记】2-建立企业级数据综合治理体系

数据作为一种新的生产要素&#xff0c;在企业构筑竞争优势的过程中起着重要作用&#xff0c;企业应将数据作为一种战略资产进行管理。数据从业务中产生&#xff0c;在IT系统中承载&#xff0c;要对数据进行有效治理&#xff0c;需要业务充分参与&#xff0c;IT系统确保遵从&…

接口自动化测试总结,接口鉴权+加密与解密+数据库操作/断言...

前言 1、接口鉴权的多种方式 1&#xff09;后端接口鉴权常用方法 cookie&#xff1a; 携带身份信息请求认证 之后的每次请求都携带cookie信息&#xff0c;cookie记录在请求头中 token&#xff1a; 携带身份信息请求认证 之后的每次请求都携带token认证信息 可能记录在请求头…

李宏毅bert记录

一、自监督学习&#xff08;Self-supervised Learning&#xff09; 在监督学习中&#xff0c;模型的输入为x&#xff0c;若期望输出是y&#xff0c;则在训练的时候需要给模型的期望输出y以判断其误差——有输入和输出标签才能训练监督学习的模型。 自监督学习在没有标注的训练…

记一次CDH集群迁移产生的问题——HIVE

背景 生产环境CDH集群迁移到新的环境&#xff0c;迁移之后使用Hive Client方执行任务一直失败。 问题1&#xff1a;metadata.SessionHiveMetaStoreClient 产生报错&#xff1a; FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.Ru…

汽车网络安全--ISO\SAE 21434解析(二)

1.风险评估方法 书接上文,我们正式开始对车灯系统的TARA分析,首先回顾下整车关于车灯系统描述: 可以比较肯定的是,我们定义的item为车灯系统,因此可以看到上图中画出了item boundary;同时定义出运行环境,个人理解,这块就是为TARA分析提供足够的环境支撑,不管是直接还…

【开源】基于Vue.js的公司货物订单管理系统

文末获取源码&#xff0c;项目编号&#xff1a; S 082 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S082。} 文末获取源码&#xff0c;项目编号&#xff1a;S082。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供…

初识树型结构与二叉树

1. 树型结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff08;它是根朝上&#xff0c;而叶朝下的&#xff09;&#xff0c;其物理结构如下图所示&#x…

docker部署elasticsearch8.x

docker部署elasticsearch8.x 提示1 注意版本差别1.1 docker修改配置1.1.2 docker使用vim报命令不存在的解决办法1.1.3 docker 容器内报错 E: List directory /var/lib/apt/lists/partial is missing. - Acquire ( : No such file or directory) 或者其他权限 PermissionError: …

鸿蒙HarmonyOS4.0开发应用学习笔记

黑马程序员鸿蒙4.0视频学习笔记&#xff0c;供自己回顾使用。1.安装开发工具DevEco Studio 鸿蒙harmony开发文档指南 DevEco Studio下载地址 选择或者安装环境 选择和下载SDK 安装总览 编辑器界面 2.TypeScript语法 2.1变量声明 //string 、number、boolean、any、u…

Linux指令学习

目录 1.ls指令 2.pwd命令 3.cd 指令 4. touch指令 5.mkdir指令 6.rmdir指令 && rm 指令 7.man指令 8.cp指令 9.mv指令 10.cat指令 11.more指令 12.less指令 13.head指令 14.find指令&#xff1a; -name 15.grep指令 16.zip/unzip指令&#xff1a; 17.tar…