Python2 日志模块的使用

Python中的日志模块(logging module)提供了灵活的日志记录功能,使开发者能够在程序运行时记录各种级别的信息,从而方便调试、跟踪程序的执行情况,并定位可能出现的问题。
日志模块可以用来:

  1. 记录程序的运行情况: 开发者可以使用日志模块记录程序的关键步骤、状态变化等信息,以便后续分析和追踪。
  2. 调试程序: 当程序出现问题时,日志可以记录错误信息、异常堆栈跟踪等,帮助开发者定位问题所在。
  3. 监控程序运行: 日志记录可以帮助监控程序的运行状态,包括性能监控、资源利用情况等。
  4. 追踪用户行为: 在服务器端应用中,日志记录也可以用于追踪用户行为,例如记录用户的请求、响应以及其他与用户交互相关的信息。

日志模块提供了多种日志级别,包括 DEBUG、INFO、WARNING、ERROR 和 CRITICAL 等级别,开发者可以根据需要选择适当的级别进行记录。此外,日志模块还支持日志的格式化、输出到不同的目标(例如文件、控制台、网络等)、日志的过滤等功能,使得日志记录更加灵活和强大。

1.日志模块的简单调用

python的日志模块默认输出且只显示了大于等于警告(WARNING)级别的日志,所以一般不显示DEBUG和INFO级别的日志。默认输出日志时可以输出警告信息、错误信息、严重信息等。

import logging  # 导入日志模块
# 默认输出且只显示了大于等于WARNING级别的日志
logging.debug('debug message')  # 记录DEBUG级别的日志,但由于默认配置只显示 WARNING 及以上级别的消息,所以不会被显示
logging.info('info message')  # 记录INFO 级别日志,同样由于默认配置不会被显示
logging.warning('warning message')  # 记录一个WARNING级别的日志
logging.error('error message')  # 记录一个WARNING级别的日志,高于默认配置的WARNING级别也会被显示。
logging.critical('critical message')  # 记录一个CRITICAL 级别的日志,高于默认配置,因此也会被显示。

2.低级别日志模块的调用

如要输出debug和info级别的日志信息,首先需要创建一个日志记录器,并设置其级别为 DEBUG。然后创建一个处理器并设置其级别为 DEBUG,将其添加到记录器中。因此,记录器和处理器都能够处理 DEBUG 级别的日志信息。最后就可以输出 DEBUG 和 INFO 级别的日志信息,它们都会被输出到控制台。

import logging# 创建日志记录器
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)  # 设置记录器级别为 DEBUG# 创建处理器(Handler)并设置级别
console_handler = logging.StreamHandler()  # 输出到控制台
console_handler.setLevel(logging.DEBUG)  # 设置处理器级别为 DEBUG# 创建格式化器
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')# 将格式化器添加到处理器
console_handler.setFormatter(formatter)# 将处理器添加到记录器
logger.addHandler(console_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')

下面的代码展示了设置日志记录的基本配置方法,包括设置日志级别、设置了日志消息的格式(日志记录时间及其格式、发生日志的文件名、所在行号、日志级别和消息内容)

import logging
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',  # 包含日志记录时间 (asctime)、发生日志的文件名 (filename)、所在行号 (lineno)、日志级别 (levelname) 和消息内容 (message)datefmt='%a,%d %b %Y %H:%M:%S',  # 设置日志记录时间的格式filename='log.log',  # 日志记录的文件名为 log.logfilemode='w')  # 文件打开形式为写入
# 
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')

3.构建一个简单的日志系统

以下代码配置了一个全局的日志记录系统,然后创建了多个 logger 实例,并为每个 logger 配置了不同的级别和处理器。接下来,使用这些 logger 实例记录了不同级别的日志消息,并将日志同时写入到文件和控制台中。创建了一个文件处理器 fh 和一个流处理器 sh。文件处理器用于将日志写入文件,流处理器用于将日志输出到控制台。

import logging#创建logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)#设置logger的级别logger1 = logging.getLogger('myLogger')
logger1.setLevel(logging.DEBUG)
logger2 = logging.getLogger('myLogger')
logger2.setLevel(logging.INFO)
logger3 = logging.getLogger('myLogger')
logger3.setLevel(logging.CRITICAL)
logger4 = logging.getLogger('myLogger')
logger4.setLevel(logging.WARNING)
logger5 = logging.getLogger('myLogger.child')
logger5.setLevel(logging.DEBUG)#创建一个handler,用于写日志文件
fh = logging.FileHandler('process2.log')
#再创建一个handler用于输出到控制台
sh = logging.StreamHandler()#定义handler输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
sh.setFormatter(formatter)#给logger添加handler
logger.addHandler(fh)
logger.addHandler(sh)logger1.addHandler(fh)
logger1.addHandler(sh)logger2.addHandler(fh)
logger2.addHandler(sh)logger2.addHandler(fh)
logger2.addHandler(sh)logger3.addHandler(fh)
logger3.addHandler(sh)logger4.addHandler(fh)
logger4.addHandler(sh)logger5.addHandler(fh)
logger5.addHandler(sh)# 记录一条日志
logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')logger1.debug('logger1 debug message')
logger1.info('logger1 info message')
logger1.warning('logger1 warning message')
logger1.error('logger1 error message')
logger1.critical('logger1 critical message')logger2.debug('logger2 debug message')
logger2.info('logger2 info message')
logger2.warning('logger2 warning message')
logger2.error('logger2 error message')
logger2.critical('logger2 critical message')logger3.debug('logger3 debug message')
logger3.info('logger3 info message')
logger3.warning('logger3 warning message')
logger3.error('logger3 error message')
logger3.critical('logger3 critical message')logger4.debug('logger4 debug message')
logger4.info('logger4 info message')
logger4.warning('logger4 warning message')
logger4.error('logger4 error message')
logger4.critical('logger4 critical message')logger5.debug('logger5 debug message')
logger5.info('logger5 info message')
logger5.warning('logger5 warning message')
logger5.error('logger5 error message')
logger5.critical('logger5 critical message')

以上内容总结自网络,整理不易,如有帮助欢迎转发,我们下次再见!

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

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

相关文章

Effective C++ 改善程序与设计的55个具体做法笔记与心得 2

二. 构造/析构/赋值运算 5. 了解C默默编写并调用哪些函数 唯有当这些函数被调用,他们才会被编译器创建出来。 请记住: ‌‌‌‌  编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。 6. 若…

渗透测试之存储型跨站脚本攻击(高危)

一、定义 跨站脚本攻击&#xff0c;指的是恶意用户往web页面里插入恶意HTML代码。当普通用户访问该web页面&#xff0c;嵌入其中的HTML代码会被执行&#xff0c;从而达到破坏的效果。 二、风险定级 高危 三、可输入的HTML标签示例 图片标签 <img src"#"> 超…

有监督学习——决策树、集成学习

1. 决策树 熵 在热力学中&#xff0c;熵&#xff08;entropy&#xff09;被用来衡量系统的不稳定程度。香农在论文《通信的数学原理》中提出信息熵的概念&#xff0c;目的是_量化数字信息的价值_。 信息熵的定义 香农提出的量化信息方式&#xff1a; \[H(P_1,P_2,\cdots P…

新建一个 React TypeScript 项目,并使用 Webpack 进行构建和打包

要用 create-react-app 新建一个 React TypeScript 项目&#xff0c;并使用 Webpack 进行构建和打包&#xff0c;可以按照以下步骤进行操作&#xff1a; 步骤 1&#xff1a;使用 create-react-app 创建 React TypeScript 项目 确保你已经安装了 Node.js 和 npm&#xff08;Nod…

【代码随想录算法训练Day43】LeetCode 518.零钱兑换II、LeetCode 377.组合总和IV、LeetCode 70.爬楼梯

Day43 动态规划第五天 LeetCode 518.零钱兑换II dp数组的含义&#xff1a;装满容量为j的背包有dp[j]种方法 递推公式&#xff1a;dp[j]dp[j-coins[i]]。 初始化&#xff1a;dp[0]1,dp[j]0 遍历顺序&#xff1a;先物品后背包&#xff0c;背包内从小到大 本题是组合数&#xff…

【Android面试八股文】你能讲一讲Kotlin语言泛型的形变是什么?

文章目录 1. 协变 (`out`)1.1 协变概念1.2 协变示例1.3 为什么协变只能读取泛型,而不能修改泛型?1. 原因概述2. 类型安全性问题3. 类型一致性结论2. 逆变 (`in`)2.1 逆变概念2.2 逆变示例2.3 为什么逆变只能修改泛型,不能读取泛型?2.3.1 为什么逆变只能读取泛型,不能修改泛…

吴恩达机器学习作业ex3:多类分类和前馈神经网络(Python实现)详细注释

文章目录 1 多类分类1.1数据集1.2 数据可视化1.3 向量化逻辑回归1.3.1 向量化代价函数1.3.2 矢量化梯度下降以及正则化表达1.4 一对多分类 2.神经网络2.1模型表示 总结&#xff08;自己训练求解参数全流程&#xff09; 1 多类分类 在本练习中&#xff0c;您将使用逻辑回归和神…

Redis学习|Jedis、SpringBoot整合Redis

Jedis 我们要使用Java 来操作 Redis,知其然并知其所以然&#xff0c;授人以渔!学习不能急躁&#xff0c;慢慢来会很快!什么是Jedis 是 Redis 官方推荐的java连接开发工具!使用java 操作Redis 中间件!如果你要使用 java操作redis&#xff0c;那么一定要对Jedis 十分的熟悉! 1、…

MySQL之复制(五)

复制 复制的原理 复制文件 3.master.info 这个文件用于保存备库连接到主库所需要的信息&#xff0c;格式为纯文本(每行一个值)&#xff0c;不同的MySQL版本&#xff0c;其记录的信息也可能不同。此文件不能删除&#xff0c;否则备库在重启后无法连接到主库。这个文件以文本的…

电脑ffmpeg.dll丢失原因解析,找不到ffmpeg.dll的5种解决方法

在数字化时代&#xff0c;多媒体文件的处理已经成为我们日常生活和工作中不可或缺的一部分。在计算机使用过程中&#xff0c;丢失ffmpeg.dll文件是一个特定但常见的问题&#xff0c;尤其是对于那些经常处理视频编解码任务的用户来说。下面小编讲全面分析ffmpeg.dll丢失原因以及…

android webview调用js滚动到指定位置

一、activity import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.tencent.smtt.sdk.WebView import com.tencent.smtt.sdk.WebViewClientclass MainActivity : AppCompatActivity() {private lateinit var webView: WebViewoverride fun …

基于深度学习的图像去噪

基于深度学习的图像去噪 图像去噪是从受噪声污染的图像中恢复原始图像的过程。在传统方法中&#xff0c;常用的去噪技术包括均值滤波、中值滤波和维纳滤波等。随着深度学习技术的发展&#xff0c;基于深度学习的图像去噪方法取得了显著进展。 深度学习图像去噪方法 1. 卷积神…

Python数据分析与建模库之从入门到四大库(Numpy、Pandas、Matplotl、Seaborn )教学课程下载

第一阶段课程-Python快速入门&#xff1a; 含&#xff1a;1.系列课程环境配置&#xff1b;2.Python快速入门&#xff1b;3.变量类型&#xff1b;4.LIST基础&#xff1b;5.List索引&#xff1b;6.循环结构&#xff1b;7.判断结构&#xff1b;8.字典&#xff1b;9.文件处理&#…

哪些好用的AI绘画生成软件?建议你试试这四款

哪些好用的AI绘画生成软件&#xff1f;随着人工智能技术的飞速发展&#xff0c;AI绘画生成软件逐渐走入大众的视野&#xff0c;为艺术创作领域带来了革命性的变革。今天&#xff0c;就让我们一起探索四款备受推崇的AI绘画生成软件&#xff0c;看看它们如何以独特的魅力&#xf…

202483读书笔记|《牵牛花浮世无篱笆:千代尼俳句250》——被红叶染红的只有一侧山坡之山 啊,单恋

202483读书笔记|《牵牛花浮世无篱笆&#xff1a;千代尼俳句250》——被红叶染红的只有一侧山坡之山 啊&#xff0c;单恋 春之句夏之句秋之句冬之句 历史读过的俳句列表: 202318读书笔记|《芭蕉芜村一茶&#xff1a;俳句三圣新译300》——樱花——让一整个春夜亮起来&#xff0…

数据库相关-Spock

数据库相关-Spock ‍ Spock连接数据库 ‍ import com.alibaba.fastjson.JSON import com.google.common.reflect.TypeToken import com.meituan.mtrace.Tracer import com.sankuai.solarsystem.aigc.common.util.GsonUtil import com.sankuai.solarsystem.aigc.domain.assi…

目标检测讲解

环境准备 pip install scikit-image -i https://pypi.tuna.tsinghua.edu.cn/simple图片读取&画框 from skimage import io import matplotlib.pyplot as plt import matplotlib.patches as mpss io.imread(dogs.jpg)_, ax plt.subplots(ncols1, nrows1, figsize(6, 6))…

零编程数据可视化展示:十个简易案例!

数据可视化是呈现数据内在价值的最终手段。数据可视化实例利用各种图表和图形设计手段&#xff0c;合乎逻辑地展示复杂而不直观的数据。为了让用户直观清楚地了解他们想要的数据及其比较关系&#xff0c;数据可视化实例的呈现至关重要。即时设计整理了10个数据可视化实例&#…

C语言练习01-循环

一、打印五行五列的三角形 如下图&#xff1a; #include<stdio.h>int main() {for (int i 1;i < 5; i){for (int j i; j < 5; j){printf("*");}printf("\n");}return 0; }#include<stdio.h>int main() {for (int i 1;i < 5; i){f…

Java 开发面试题精选:RocketMQ 一篇全搞定

前言 RocketMQ作为一个高性能、高可用的分布式消息和流处理平台&#xff0c;广泛应用于分布式系统中的解耦、异步通信和数据流处理场景。这篇文章我精选了一些关于RockerMQ面试题目&#xff0c;这些问题涵盖了RocketMQ的所有关键知识点&#xff0c;从基本概念到高级应用&#…