Python | 日志logging模块最基础的应用

之前总结过关于在项目中使用logging模块的好处,时间过去三四个月,结果从新遇到这个东西,又想不起它的基础用法,翻看过去文章发现还是有些进阶的,特此,写一篇最基础的应用来结束对logging的认识
  • 过去两篇文章
    logging | 项目开发中日志模块logging在整个工程中的应用
    unittest | 使用unittest模块来测试logging日志模块功能

建议先了解本篇文章,然后在这篇文章的基础上继续阅读进阶篇,进阶篇如上 顺序阅读即可

import loggingprint('logging _nameToLevel:',logging._nameToLevel)print('logging _levelToName:',logging._levelToName)
# 日志优先级:CRIRICAL>ERROR>WARNING>INFO>DEBUG# 当日志级别设置为某个级别时,则低于该级别的日志将不输出。如日志级别设置为INFO,则DEBUG级别的日志将不输出。# 根日志器默认日志级别为WARNING,这里将其重置,以保证debug、info级别的日志也能输出# logging.basicConfig(level=logging.ERROR)
# 配置基本的日志输出格式和级别
logging.basicConfig(level=logging.INFO, format='[%(asctime)s] [%(threadName)s] [line:%(lineno)d] %(levelname)s:%(message)s')# # {'CRITICAL / FATAL': 50,  'ERROR': 40, 'WARN': 30, 'WARNING': 30, 'INFO': 20, 'DEBUG': 10, 'NOTSET': 0}
logging.debug("1 This is a %s message.",logging.getLevelName(logging.DEBUG))
logging.info("2 This is an %s message.",logging.getLevelName(logging.INFO))
logging.warning("3 This is a %s message.",logging.getLevelName(logging.WARNING))
logging.error("4 This is an %s message.",logging.getLevelName(logging.ERROR))
logging.critical("5 This is a %s message.",logging.getLevelName(logging.CRITICAL))
logging.fatal("6 This is a %s message.",logging.getLevelName(logging.FATAL))logging.log(logging.ERROR,"This ia a message from logging.log().")# 使用不同级别记录日志
logging.debug("这是一条调试信息")
logging.info("这是一条普通信息")
logging.warning("这是一条警告信息")
logging.error("这是一条错误信息")
logging.critical("这是一条严重错误信息")
D:\ANACONDA\envs\webdev\python.exe E:\pythonProject\PythonProject\learnTest\looger1.py 
[2024-11-20 21:07:34,415] [MainThread] [line:30] INFO:2 This is an INFO message.
[2024-11-20 21:07:34,415] [MainThread] [line:31] WARNING:3 This is a WARNING message.
[2024-11-20 21:07:34,415] [MainThread] [line:32] ERROR:4 This is an ERROR message.
[2024-11-20 21:07:34,415] [MainThread] [line:33] CRITICAL:5 This is a CRITICAL message.
[2024-11-20 21:07:34,415] [MainThread] [line:34] CRITICAL:6 This is a CRITICAL message.
[2024-11-20 21:07:34,415] [MainThread] [line:36] ERROR:This ia a message from logging.log().
[2024-11-20 21:07:34,415] [MainThread] [line:41] INFO:这是一条普通信息
[2024-11-20 21:07:34,415] [MainThread] [line:42] WARNING:这是一条警告信息
[2024-11-20 21:07:34,415] [MainThread] [line:43] ERROR:这是一条错误信息
[2024-11-20 21:07:34,415] [MainThread] [line:44] CRITICAL:这是一条严重错误信息
logging _nameToLevel: {'CRITICAL': 50, 'FATAL': 50, 'ERROR': 40, 'WARN': 30, 'WARNING': 30, 'INFO': 20, 'DEBUG': 10, 'NOTSET': 0}
logging _levelToName: {50: 'CRITICAL', 40: 'ERROR', 30: 'WARNING', 20: 'INFO', 10: 'DEBUG', 0: 'NOTSET'}
  • 参数解释

format=‘[%(asctime)s] [%(threadName)s] [line:%(lineno)d] %(levelname)s:%(message)s

%(asctime)s:日志记录的时间戳。
%(threadName)s:线程名称,表示产生日志记录的线程的名字
[line:%(lineno)d]:日志记录产生的代码行号。%(lineno)d 会获取当前日志记录的行号。
-:时间戳和日志级别之间的分隔符。
%(levelname)s:日志级别名称(如DEBUG、INFO、WARNING等)。
::日志级别和日志消息之间的分隔符。
%(message)s:日志消息本身。

使用句柄

import logging# # 配置日志记录器,将日志写入文件
# logging.basicConfig(filename='app.log',level=logging.DEBUG,
#                     format='[%(asctime)s] [%(threadName)s] [line:%(lineno)d] %(levelname)s:%(message)s')
# # 参数filename='app.log' 一旦设置好 则控制台不会输出日志信息  将所有信息会写入到log日志文件
#
#
# logging.debug("这条消息会被记录到文件中")
# logging.info("程序正常运行中...")#  上述是一种便捷快速的方法  复杂程序使用日志记录器# 创建一个日志记录器(logger) 将所有消息记录到文件中,同时将错误级别及以上的消息输出到控制台
logger = logging.getLogger('my_app') # 名称
logger.setLevel(logging.ERROR)  # 日志优先级:CRIRICAL>ERROR>WARNING>INFO>DEBUG# 创建一个文件处理器  文件写入的信息 应该是程序中所有出现的信息  因此级别应该设置为最低
file_handler = logging.FileHandler('appfilerecord.log')
file_handler.setLevel(logging.DEBUG)  # 设置信息处理的级别 DEBUG  将所有DEBUG级别以上的信心写入appfilerecord文件中# 创建一个控制台处理器  控制台显示的应该是级别较高的信息  因此设置error以上的级别
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.ERROR)# 创建一个格式器,并将它添加到处理器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)# 将处理器添加到日志记录器
logger.addHandler(file_handler)
logger.addHandler(console_handler)# 使用日志记录器
# 日志优先级:CRIRICAL>ERROR>WARNING>INFO>DEBUG
logger.debug("这条消息会被记录到文件中")  # 文件处理器
logger.error("这条错误消息会同时出现在文件和控制台中") # 控制台处理器
  • 基本流程步骤
# 创建一个日志记录器(logger)  
# 创建一个文件处理器logging.FileHandler('appfilerecord.log')
# 创建一个控制台处理器logging.StreamHandler()
# 创建一个格式器,并将它添加到处理器logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 将处理器添加到日志记录器

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

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

相关文章

Redis模拟延时队列 实现日程提醒

使用Redis模拟延时队列 实际上通过MQ实现延时队列更加方便,只是在实际业务中种种原因导致最终选择使用redis作为该业务实现的中间件,顺便记录一下。 该业务是用于日程短信提醒,用户添加日程后,就会被放入redis队列中等待被执行发…

【第4章 | 分类与逻辑回归】(python机器学习)

一、逻辑回归 1.1逻辑回归 二项逻辑回归 • Binomial logistic regression model是一种分类模型 • 由条件概率P(Y|X)表示的分类模型 • 形式化为logistic distribution • X取实数,Y取值1,0 特点: • 事件的几率odds:事件发生与事件不发生…

VSCode+ESP-IDF开发ESP32-S3-DevKitC-1(1)开发环境搭建

VSCodeESP-IDF开发ESP32-S3-DevKitC-1(1)开发环境搭建 1.开发环境搭建(安装ESP-IDF)2.开发环境搭建(安装VS Code)3.开发环境搭建(VSCode中安装ESP-IDF插件及配置) 1.开发环境搭建&am…

RAID存储技术 详解

RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种将多个物理硬盘组合为一个逻辑存储单元的技术。它通过分布数据、冗余校验和容错能力,提高存储系统的性能、可靠性和容量利用率。 以下从底层原理和源代码层面…

Makefile 之 自动生成依赖性

在Makefile中的依赖关系可能会需要包含一系列的头文件,比如, 如果的main.c中有一句"#include defs.h",那么的依赖关系应该是: main.o : main.c defs.h 但是,如果是一个比较大型的工程,必需清…

深入理解TTY体系:设备节点与驱动程序框架详解

往期内容 本专栏往期内容:Uart子系统 UART串口硬件介绍 interrupt子系统专栏: 专栏地址:interrupt子系统Linux 链式与层级中断控制器讲解:原理与驱动开发 – 末片,有专栏内容观看顺序 pinctrl和gpio子系统专栏&#xf…

Qt如何屏蔽工具栏(QToolBar)自动折叠功能

最近发现Qt上工具栏一行放不下的时候,会自动折叠起来。当用户点击展开功能的小三角按钮时,工具栏会展开成多行。这个功能本身没什么问题,但是当工具栏展开的时候,鼠标光标一旦不小心移动到了工具栏外面,这时候&#xf…

【大语言模型】ACL2024论文-17 VIDEO-CSR:面向视觉-语言模型的复杂视频摘要创建

【大语言模型】ACL2024论文-17 VIDEO-CSR:面向视觉-语言模型的复杂视频摘要创建 VIDEO-CSR:面向视觉-语言模型的复杂视频摘要创建 目录 文章目录 【大语言模型】ACL2024论文-17 VIDEO-CSR:面向视觉-语言模型的复杂视频摘要创建目录摘要研究…

华为openEuler考试真题演练(附答案)

【单选题】 以下关于互联网的描述,哪个选项是正确的? A:Nginx 在万维网中可以作为 ftp 服务器的反向代理,并与ftp服务器的数量--对应 B:Nginx 在互联网中可以作为 web服务器端,成为万维网的一个节点 C:互联网上的的资源需使用 Nginx进行七层…

web网络安全系统

最近了解了基于web的网络安全系统的设计与实现项目,在这个平台记录一下这个基于web的网络安全系统的设计与实现项目,方便以后再次使用或学习的时候能够及时的翻阅。在完成基于web的网络安全系统的设计与实现项目的时候,考虑了很多框架。最终决…

03 —— Webpack 自动生成 html 文件

HtmlWebpackPlugin | webpack 中文文档 | webpack中文文档 | webpack中文网 安装 npm install --save-dev html-webpack-plugin 下载html-webpack-plugin本地软件包 npm i html-webpack-plugin --save-dev 配置webpack.config.js让webpack拥有插件功能 const HtmlWebpack…

传奇996_32——npc及怪物顶戴花翎

离线文档直接搜:顶戴花翎功能、NPC顶戴花翎配置 一共两步: 添加顶戴动态特效\Mir200\Envir\NpcIcons**\xx.txt 写对应文件,没有文件或问文件夹自己新建, **是npclist.xlsx中配置的npc路径地图名xx是npc名称 举例: 9…

Jmeter进阶篇(27)压测时如何计算最合适的并发量

Jmeter性能测试大全:Jmeter性能测试大全系列教程❤,如果觉得我讲的还不错,欢迎订阅哦~ 📚如何确定 JMeter 压测中的并发量 在进行性能测试时,确定合适的并发量是非常非常重要的一步。并发量决定了模拟用户的数量,她会直接影响到测试结果的有效性和可靠性。 在实际做性…

[RoarCTF2019]polyre WP

先用deflat去以下流平坦化 ~/Desktop/re/file took 3s │ tools Py │ at 00:43:37 ❯ python ../tools/deflat-master/flat_control_flow/deflat.py ./attachment 0x400620 *******************relevant blocks************************ prologu…

STM32设计井下瓦斯检测联网WIFI加Zigbee多路节点协调器传输-分享

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 本系统基于STM32微控制器和Zigbee无线通信技术,设计了…

golang通用后台管理系统09(系统操作日志记录)

1.日志工具类 package log/**** 日志记录 wangwei 2024-11-18 15:30*/ import ("log""os""path/filepath""time" )// 获取以当前日期命名的日志文件路径 func getLogFilePath() string {currentDate : time.Now().Format("2006-…

100.【C语言】数据结构之二叉树的堆实现 上

目录 1.顺序结构 2.示意图 ​编辑 从物理结构还原为逻辑结构的方法 3.父子节点编号的规律 4.顺序存储的前提条件 5.堆的简介 堆的定义 小根堆和大根堆 6.堆的插入 7.堆的实现及操作堆的函数 堆的结构体定义 堆初始化函数HeapInit 堆插入元素函数HeapPush 堆向上…

Ubuntu Linux使用前准备动作_使用root登录图形化界面

Ubuntu默认是不允许使用 root 登录图形化界面的。这是出于安全考虑的设置。但如果有需要,可以通过以下步骤来实现使用 root 登录: 1、设置 root 密码 打开终端,使用当前的管理员账户登录系统。在终端中输入命令sudo passwd root&#xff0c…

博客摘录「 nvm安装与使用详解(Window11)」2024年4月10日

nvm -v nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置)-CSDN博客

我们来学mysql -- EXPLAIN之type(原理篇)

EXPLAIN之type 题记示例表type 题记 书接上文《 EXPLAIN之select_type》2024美国大选已定,川普剑登上铁王座,在此过程中出谋划策的幕僚很重要,是他们决定了最终的执行计划在《查询成本之索引选择》中提到,explain的输出&#xff…