Python中关于logging模块的学习笔记


Posted in Python onJune 03, 2020

python的logging模块

python提供了一个日志处理的模块,那就是logging。

导入logging模块使用以下命令:

import logging

logging模块的用法:

1.简单的将日志打印到屏幕上

import logging
logging.debug("This is debug message")
logging.info("This is info message")
logging.warning("This is warning message")
logging.error("This is error message")
logging.critical("This is critical message")

会在屏幕上显示出以下内容:

WARNING:root:This is warning message

ERROR:root:This is error message

CRITICAL:root:This is critical message

默认情况下python的logging模块将日志打印到了标准输出中,也就是屏幕上,且只显示了大于等于WARNING级别的日志.

这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG)

默认直接输出的日志格式为日志级别:Logger名称:用户:输出消息。

2.现在修改日志的默认输出级别为debug,重新设定输出时间的格式,

import logging
logging.basicConfig(level=logging.DEBUG,
          format="%(asctime)s %(levelname)s %(message)s",
          datefmt="%Y-%m-%d %H:%M:%S")
logging.debug("This is debug message")
logging.info("This is info message")
logging.warning("This is warning message")
logging.error("This is error message")
logging.critical("This is critical message")

会在屏幕上显示以下信息;

2017-07-02 10:41:18 DEBUG This is debug message

2017-07-02 10:41:18 INFO This is info message

2017-07-02 10:41:18 WARNING This is warning message

2017-07-02 10:41:18 ERROR This is error message

2017-07-02 10:41:18 CRITICAL This is critical message

3.现在想把程序产生的日志写入文件当中,可以这样设定:

import logging
logging.basicConfig(level=logging.DEBUG,
          format="%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s",
          datefmt="%Y-%m-%d %H:%M:%S",
          filename="log.txt",
          filemode="w")
logging.debug("This is debug message")
logging.info("This is info message")
logging.warning("This is warning message")
logging.error("This is error message")
logging.critical("This is critical message")

运行程序,会在脚本目录下生成一个名为log.txt的文件。

log.txt文件的内容如下:

2017-07-02 10:49:13 logging_modules.py[line:211] DEBUG This is debug message

2017-07-02 10:49:13 logging_modules.py[line:212] INFO This is info message

2017-07-02 10:49:13 logging_modules.py[line:213] WARNING This is warning message

2017-07-02 10:49:13 logging_modules.py[line:214] ERROR This is error message

2017-07-02 10:49:13 logging_modules.py[line:215] CRITICAL This is critical message

在这里设定日志文件的输出使用的是basicConfig这个方法:

logging.basicConfig函数各参数:
filename: 指定输出日志的文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,写入模式用'w',追加模式使用'a'
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: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING,这里设定为logging.DEBUG

4.既想现在就看到输出的日志,又想把程序运行的日志保存在文件里,方便以后查看,可以这样设定:

import logging
logger=logging.getLogger()
#创建一个file_handle变量,用于把日志写入到文件
file_handle=logging.FileHandler("log1.txt")
#创建一个stream_handle变量,用于输出日志到屏幕上
stream_handle=logging.StreamHandler()
#设定输出日志的级别为debug级别
logger.setLevel(logging.DEBUG)
#设定输出日志的格式
fmt=logging.Formatter("%(asctime)s-%(levelname)s-%(message)s")
#为写入文件的日志添加已设定的格式
file_handle.setFormatter(fmt)
#为输出到屏幕的日志添加已设定的格式 
stream_handle.setFormatter(fmt)
logger.addHandler(file_handle)
logger.addHandler(stream_handle)
#设定输出日志的信息
logging.debug("This is debug message")
logging.info("This is info message")
logging.warning("This is warning message")
logging.error("This is error message")
logging.critical("This is critical message")

运行程序后,会生成一个名为log1.txt的文件,文件的内容和屏幕上显示的内容都是:

2017-07-02 11:04:53,622-DEBUG-This is debug message

2017-07-02 11:04:53,623-INFO-This is info message

2017-07-02 11:04:53,623-WARNING-This is warning message

2017-07-02 11:04:53,623-ERROR-This is error message

2017-07-02 11:04:53,624-CRITICAL-This is critical message

在这里,还可以添加以下选项用来指定把要写入文件的日志设定为debug级别,而输出到屏幕上的日志还是warning级别

fh.setLevel(logging.Debug)

内容扩展:

日志的作用

通过log的分析,可以方便用户了解系统或软件、应用的运行情况;如果你的应用log足够丰富,也可以分析以往用户的操作行为、类型喜好、地域分布或其他更多信息;如果一个应用的log同时也分了多个级别,那么可以很轻易地分析得到该应用的健康状况,及时发现问题并快速定位、解决问题,补救损失。

简单来讲就是,我们通过记录和分析日志可以了解一个系统或软件程序运行情况是否正常,也可以在应用程序出现故障时快速定位问题。比如,做运维的同学,在接收到报警或各种问题反馈后,进行问题排查时通常都会先去看各种日志,大部分问题都可以在日志中找到答案。再比如,做开发的同学,可以通过IDE控制台上输出的各种日志进行程序调试。对于运维老司机或者有经验的开发人员,可以快速的通过日志定位到问题的根源。可见,日志的重要性不可小觑。日志的作用可以简单总结为以下3点:

程序调试

了解软件程序运行情况,是否正常

软件程序运行故障分析与问题定位

如果应用的日志信息足够详细和丰富,还可以用来做用户行为分析,如:分析用户的操作行为、类型洗好、地域分布以及其它更多的信息,由此可以实现改进业务、提高商业利益。

到此这篇关于Python中关于logging模块的学习笔记的文章就介绍到这了,更多相关Python之logging模块相关介绍内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python批量同步web服务器代码核心程序
Sep 01 Python
Python查找相似单词的方法
Mar 05 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
Jul 07 Python
Python提取特定时间段内数据的方法实例
Apr 01 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
Sep 29 Python
使用Matplotlib 绘制精美的数学图形例子
Dec 13 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
在keras下实现多个模型的融合方式
May 23 Python
python中什么是面向对象
Jun 11 Python
详解Python为什么不用设计模式
Jun 24 Python
Python pandas之求和运算和非空值个数统计
Aug 07 Python
Python学习之os模块及用法
Jun 03 #Python
Python爬虫HTPP请求方法有哪些
Jun 03 #Python
什么是Python变量作用域
Jun 03 #Python
Python Flask框架实现简单加法工具过程解析
Jun 03 #Python
python自定义函数def的应用详解
Jun 03 #Python
Python中的整除和取模实例
Jun 03 #Python
python 负数取模运算实例
Jun 03 #Python
You might like
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
用PHP将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法
2013/12/31 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
Python read函数按字节(字符)读取文件的实现
2019/07/03 Python
Python3离线安装Requests模块问题
2019/10/13 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
kfc实习自我鉴定
2013/12/14 职场文书
2013年学期结束动员演讲稿
2014/01/07 职场文书
连锁酒店店长职责范本
2014/02/13 职场文书
餐厅总厨求职信
2014/03/04 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
python 遍历磁盘目录的三种方法
2021/04/02 Python