Python的日志记录-logging模块的使用

一、日志

1.1什么是日志

日志是跟踪软件运行时所发生的事件的一种方法,软件开发者在代码中调用日志函数,表明发生了特定的事件,事件由描述性消息描述,同时还包含事件的重要性,重要性也称为级别或严重性

1.2何时使用日志

logging模块提供了一些函数,用来做一些简单的日志,他们是debug()、info()、warning()、error()、critical()。要决定什么时候使用logging,见下表,描述了常见的任务及对应的最佳工具。

你想完成的任务完成任务的最佳工具
控制台上显示命令行脚本或者程序的常规用法说明print()
报告在程序的正常操作期间发生的事件(例如,用于状态监视或故障调查)logging.info() (或者 logging.debug() ,非常详细的输出,用于诊断目的)
对于特定的运行时事件发出警告

在库代码中使用warnings.warn() ,表明问题是可以避免的,且客户应用应该修改代码以消除警告

使用logging.warning() 表示客户应用对此问题无能为力,但是还是应该注意该事件。

对于特定的运行时事件报告错误抛出异常
报告错误的抑制而不引发异常(例如,在长时间运行的服务器进程中的错误处理程序)根据特定的错误和应用领域,使用合适的logging.error()、 logging.exception() 或者logging.critical()

 

1.3事件严重性(事件的级别)

 

级别何时使用
DEBUG详细信息,一般只在调试问题时使用。
INFO证明事情按预期工作。
WARNING某些没有预料到的事件的提示,或者在将来可能会出现的问题提示。例如:磁盘空间不足。但是软件还是会照常运行。
ERROR由于更严重的问题,软件已不能执行一些功能了。
CRITICAL严重错误,表明软件已不能继续运行了。

默认等级时warning。意味着只有warning以上的事件等级才会反馈信息,可以通过logging.setLevel()修改默认等级。

二、Logging简介

logging模块定义的类和函数位应用程序和库实现了一个灵活的事件日志系统。由标准库提供的日志记录API的好处是所有的Python模块都可以使用日志。

2.1使用logging记录到控制台

#1.使用logging 将日志打印到控制台
logging.basicConfig(level=logging.DEBUG) #默认level时warning。所以需要修改一下级别
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')

2.2使用logging将日志记录到文件

#2.将日志记录到文件
logging.basicConfig(filename='logging.log',filemode='a',level=logging.DEBUG) #默认level时warning。所以需要修改一下级别
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')

2.3 如果程序由多个模块,组织日志

# myapp.py
import logging
import mylibdef main():logging.basicConfig(filename='myapp.log', level=logging.INFO)logging.info('Started') mylib.do_something()  logging.info('Finished') if __name__ == '__main__':main()

三、改变显示消息格式Formatter

logger对象一般不会直接实例化得到,而是通过模块级别的logging.getLogger()得到。以相同的名字多次调用getLogger()。永远返回相同的logger对象的引用-->单例模式。

3.1 format 指定输出格式和内容

 

import logging
logging.basicConfig(format='%(levelname)s:%(message)s',level=logging.DEBUG)
logging.debug('debug msg')
logging.info('info msg')
logging.warning('warning msg')
logging.error('error msg')
logging.critical('critical msg')

常用的format格式:

%(levelno)s: 打印日志级别的数值%(levelname)s: 打印日志级别名称%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]%(filename)s: 打印当前执行程序名%(funcName)s: 打印日志的当前函数%(lineno)d: 打印日志的当前行号%(asctime)s: 打印日志的时间%(thread)d: 打印线程ID%(threadName)s: 打印线程名称%(process)d: 打印进程ID%(message)s: 打印日志信息
format
import os
#format
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s:%(filename)s [line:%(lineno)d] %(levelname)s %(message)s',datefmt='%a, %d %b %Y %H:%M:%S',filename= os.path.join('format.txt'),filemode='w',)
logging.debug('debug msg')
logging.error('error msg')

四、Logger

Logger对象有三个作用,首先,它暴露给应用几个方法以便应用可以在运行时写log;其次,Logger对象按照log信息的严重程度或者根据filter对象来决定如何处理log信息(默认的过滤功能);最后,logger还负责把log信息传送给相关的loghandlers。

4.1将日志记录控制台及文件

import logginglogger = logging.getLogger()
# 创建一个handler,用于写入日志文件
fh = logging.FileHandler('test.log',encoding='utf-8') # 再创建一个handler,用于输出到控制台 
ch = logging.StreamHandler() 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setLevel(logging.DEBUG)fh.setFormatter(formatter) 
ch.setFormatter(formatter) 
logger.addHandler(fh) #logger对象可以添加多个fh和ch对象 
logger.addHandler(ch) 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')

 

logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。另外,可以通过:logger.setLevel(logging.Debug)设置级别,当然,也可以通过

fh.setLevel(logging.Debug)单对文件流设置某个级别。

转载于:https://www.cnblogs.com/weihengblog/p/8568283.html

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

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

相关文章

询问HTG:白噪声屏幕保护程序,有效的文件命名以及从密码泄露中恢复

Once a week we share three of the questions we’ve answered from the Ask HTG inbox with the greater readership; this week we’re looking at white noise screen savers, efficient file naming systems, and recovering from a password compromise. 每周一次&#…

专家预测第二波WannaCry勒索病毒攻击即将到来!

WannaCry的传播脚步今晨戛然而止 今天一大早,全网的WannaCry蠕虫病毒攻击突然减弱消退了!所有这一切功劳来自于英国研究人员malwaretech,他通过逆向发现WannaCry代码中有一个特殊域名地址: www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.co…

01.HTML基础命令笔记

目录 HTML结构 body内常用标签 常用 div与span img a标签 超链接标签 其他格式标签 列表 表格 表单 select标签 label标签 textarea多行文本 HTML结构 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"&…

ios numlock_从“提示”框:默认情况下启用NumLock,无广告的iOS应用和立体声供电的派对灯...

ios numlockOnce a week we round up some of the great tips readers have sent into the tip box. This week we’re looking at how to enable the NumLock by default, stripping ads from iOS apps, and turning Christmas lights into audio-responsive party lights. 每…

Windows 7 自动更新失败导致无法进系统解决方案

故障现象&#xff1a;自动更新后&#xff0c;重启电脑&#xff0c;提示&#xff1a;&#xff08;配置Windows update 失败 还原更改 请勿关闭计算机&#xff09;&#xff0c; 而计算机一直停留该界面&#xff0c;如果半个小时以上都无反应。此时&#xff0c;就不要再继续等待了…

PaperWeekly 第28期 | 图像语义分割之特征整合和结构预测

“ 余昌黔 华中科技大学硕士 研究方向为图像语义分割 知乎专栏 https://zhuanlan.zhihu.com/semantic-segmentation 前言 近来阅读了 PASCAL VOC 2012 排行榜上前几的文章&#xff0c;包括 PSPNet 和林国省老师的几篇论文&#xff0c;觉得现在在 semantic segmentation 领域对于…

02.CSS基础笔记及导入

CSS是什么 CSS&#xff08;Cascading Style Sheet&#xff0c;层叠样式表)定义如何显示HTML元素。 当浏览器读到一个样式表&#xff0c;它就会按照这个样式表来对文档进行格式化&#xff08;渲染&#xff09;。 CSS样式 CSS引入HTML 内部样式与外部样式 <!DOCTYPE> …

如何还原桌面图标_如何为Windows 10桌面图标还原或更改文本的默认外观?

如何还原桌面图标For whatever reason, sooner or later we all have someone or something mess around with our keyboards and create ‘interesting’ results. With that in mind, today’s SuperUser Q&A post has a simple and elegant way to help a frustrated re…

「前端早读君007」css进阶之彻底理解视觉格式化模型

今日励志 不论你在什么时候开始&#xff0c;重要的是开始之后不要停止。 前言 对于部分前端工程师来讲&#xff0c;有时候CSS令他们很头疼&#xff0c;明明设置了某个样式&#xff0c;但是布局就是不起作用。 如果你也有这种问题&#xff0c;那么是时候学习下什么是css视觉格式…

.NET周报【11月第3期 2022-11-22】

国内文章.NET Conf China 2022 第一批讲师阵容大揭秘&#xff01;整个期待了&#xff01;https://mp.weixin.qq.com/s/4p89hhBPw6qv-0OB_T_TOg目光看过来 2022 年 12 月 3-4 日&#xff0c;一场社区性质的国内规模最大的 线上线下.NET Conf 2022 技术大会 即将盛大开幕。目前大…

解读Facebook CAN:如何给人工智能赋予艺术创作的力量

雷锋网 AI 科技评论按&#xff1a;能够迭代进化、模仿指定数据特征的GAN&#xff08;生成式对抗性网络&#xff09;已经是公认的处理图像生成问题的好方法&#xff0c;自从提出以来相关的研究成果不少&#xff0c;在图像增强、超分辨率、风格转换任务中的效果可谓是惊人的。 &a…

全向轮底盘磁导轨寻迹

全向轮底盘上安装两条磁传感器带用于磁导轨寻迹 如简图所示&#xff0c;两条与Y直线相交的黑色线条我们认为是两条磁检测传感器带 矢量方法修正车体位置 定义轨道左为负向&#xff0c;轨道右为正向。传感器左检测为负&#xff0c;右检测为正&#xff1b; 定义底盘坐标系为αβ&…

02-1.CSS边框,边界,布局相关笔记

目录 CSS盒子模型 padding内填充 边框 边框属性 border-radius margin外边距 CSS盒子模型 Content(内容): 盒子的内容&#xff0c;显示文本和图像 >>>>类似word 文字A&#xff0c;改变字体与大小padding: 用于控制内容与边框之间的距离 …

android仿ios弹框_在“提示”框中:iOS外观(在Android上运行),Google Maps作为Time Machine,下载Wii游戏保存...

android仿ios弹框Once a week we round up some great reader tips and share them with everyone. Read on to see how to make your Android phone look like iOS, use a Google Maps mashup like a time machine, and download Wii game saves. 每周一次&#xff0c;我们收集…

使用 C# 开发的摸鱼背单词软件 ToastFish

你好&#xff0c;这里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;实用的工具和组件&#xff0c;希望对您有用&#xff01;摸鱼神器ToastFish 是一个使用 C# 开发的桌面软件&#xff0c;由 Uahh 开发&#xff0c; 这是一个利用Windows通知栏背单词的软件&…

03.JavaScript对DOM操作

JavaScript引入方式 外部引入 在head或者body中&#xff0c;添加以下代码 <script type"text/javascript" src"js/demo.js"></script> 内部引入 在head或body中&#xff0c;定义script标签&#xff0c;然后在script标签里面写js代码 <…

kotlin的suspend对比csharp的asyncawait

协程的出现大大降低了异步编程的复杂度&#xff0c;可以让我们像写同步代码一样去写异步代码&#xff0c;如果没有它&#xff0c;那么很多异步的代码都是需要靠回调函数来一层层嵌套&#xff0c;这个在我之前的一篇有介绍 rxjava回调地狱-kotlin协程来帮忙本篇文章主要介绍kotl…

file协议 控制面板_如何在Windows File Explorer导航窗格中显示控制面板和回收站

file协议 控制面板By default, the Windows File Explorer’s sidebar is divided into big categories like Quick Access, This PC, Network, and so on. But a quick setting change can make your navigation pane look a bit more like the traditional tree you’d see i…

过滤器(Filter)

1 什么是过滤器 过滤器JavaWeb三大组件之一&#xff0c;它与Servlet很相似&#xff01;不它过滤器是用来拦截请求的&#xff0c;而不是处理请求的。 当用户请求某个Servlet时&#xff0c;会先执行部署在这个请求上的Filter&#xff0c;如果Filter“放行”&#xff0c;那么会继…

发布适用于 .NET 7 的 .NET MAUI

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;6分钟)我们在六个月前向您介绍了 .NET 多平台应用程序 UI (MAUI)&#xff0c;现在我们很高兴地宣布 .NET MAUI 在我们的下一个主要版本 .NET 7 中普遍可用。在此短的时间范围内&#xff0c;我们在 .NET MAUI 中的主要…