Python中logging日志的四个等级和使用


Posted in Python onNovember 17, 2020

1. logging日志的介绍

在现实生活中,记录日志非常重要,比如:银行转账时会有转账记录;飞机飞行过程中,会有个黑盒子(飞行数据记录器)记录着飞机的飞行过程,那在咱们python程序中想要记录程序在运行时所产生的日志信息,怎么做呢?

可以使用 logging 这个包来完成

记录程序日志信息的目的是:
1. 可以很方便的了解程序的运行情况
2. 可以分析用户的操作行为、喜好等信息
3. 方便开发人员检查bug

2. logging日志级别介绍

日志等级可以分为5个,从低到高分别是:
1. DEBUG
 2. INFO
 3. WARNING
 4. ERROR
 5. CRITICAL

日志等级说明:

  • DEBUG:程序调试bug时使用
  • INFO:程序正常运行时使用
  • WARNING:程序未按预期运行时使用,但并不是错误,如:用户登录密码错误
  • ERROR:程序出错误时使用,如:IO操作失败
  • CRITICAL:特别严重的问题,导致程序不能再继续运行时使用,如:磁盘空间为空,一般很少使 用
  • 默认的是WARNING等级,当在WARNING或WARNING之上等级的才记录日志信息。
  • 日志等级从低到高的顺序是: DEBUG < INFO < WARNING < ERROR < CRITICAL

3. logging日志的使用

在 logging 包中记录日志的方式有两种:

1.输出到控制台
2.保存到日志文件

日志信息输出到控制台的示例代码:

import logging

logging.debug('这是⼀个debug级别的⽇志信息')
logging.info('这是⼀个info级别的⽇志信息')
logging.warning('这是⼀个warning级别的⽇志信息')
logging.error('这是⼀个error级别的⽇志信息')
logging.critical('这是⼀个critical级别的⽇志信息')

运行结果:

WARNING:root:这是⼀个warning级别的⽇志信息
ERROR:root:这是⼀个error级别的⽇志信息
CRITICAL:root:这是⼀个critical级别的⽇志信息

说明:
日志信息只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING

logging日志等级和输出格式的设置:

import logging
# 设置⽇志等级和输出⽇志格式
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
logging.debug('这是⼀个debug级别的⽇志信息')

logging.info('这是⼀个info级别的⽇志信息')
logging.warning('这是⼀个warning级别的⽇志信息')
logging.error('这是⼀个error级别的⽇志信息')
logging.critical('这是⼀个critical级别的⽇志信息')

运行结果:

2019-02-13 20:41:33,080 - hello.py[line:6] - DEBUG: 这是⼀个debug级别的⽇志信息
2019-02-13 20:41:33,080 - hello.py[line:7] - INFO: 这是⼀个info级别的⽇志信息
2019-02-13 20:41:33,080 - hello.py[line:8] - WARNING: 这是⼀个warning级别的⽇志信息
2019-02-13 20:41:33,080 - hello.py[line:9] - ERROR: 这是⼀个error级别的⽇志信息
2019-02-13 20:41:33,080 - hello.py[line:10] - CRITICAL: 这是⼀个critical级别的⽇志信息

代码说明:

level 表示设置的日志等级
format 表示日志的输出格式, 参数说明:

  • %(levelname)s: 打印日志级别名称
  • %(filename)s: 打印当前执行程序名
  • %(lineno)d: 打印日志的当前行号
  • %(asctime)s: 打印日志的时间
  • %(message)s: 打印日志信息

日志信息保存到日志文件的示例代码:

import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
filename="log.txt",
filemode="w")
logging.debug('这是⼀个debug级别的⽇志信息')
logging.info('这是⼀个info级别的⽇志信息')
logging.warning('这是⼀个warning级别的⽇志信息')
logging.error('这是⼀个error级别的⽇志信息')
logging.critical('这是⼀个critical级别的⽇志信息')

运行结果:

Python中logging日志的四个等级和使用

4. logging日志在mini-web项目中应用

web.py 程序使用logging日志示例:

1. 程序入口模块设置logging日志的设置

import socket
import threading
import sys
import framework
import logging
# logging⽇志的配置
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
filename="log.txt",
filemode="w")

2. INFO级别的日志输出,示例代码:

# 判断是否是动态资源请求
if request_path.endswith(".html"):
"""这⾥是动态资源请求,把请求信息交给框架处理"""
logging.info("动态资源请求:" + request_path)
...
else:
"""这⾥是静态资源请求"""
logging.info("静态资源请求:" + request_path)

3. WARNING级别的日志输出,示例代码:

# 获取命令⾏参数判断⻓度
if len(sys.argv) != 2:
print("执⾏命令如下: python3 xxx.py 9000")
logging.warning("⽤⼾在命令⾏启动程序参数个数不正确!")
return
# 判断端⼝号是否是数字
if not sys.argv[1].isdigit():
print("执⾏命令如下: python3 xxx.py 9000")
logging.warning("⽤⼾在命令⾏启动程序参数不是数字字符串!")
return

framework.py 程序使用logging日志示例:

1.ERROR级别的日志输出,示例代码:

# 处理动态资源请求
def handle_request(env):
# 获取动态请求资源路径
request_path = env["request_path"]
print("接收到的动态资源请求:", request_path)
# 遍历路由列表,选择执⾏的函数
for path, func in route_list:
if request_path == path:
result = func()
return result
else:
logging.error("没有设置相应的路由:" + request_path)
# 没有找到动态资源
result = not_found()
return result

说明:
logging日志配置信息在程序入口模块设置一次,整个程序都可以生效。
logging.basicConfig 表示 logging 日志配置操作

5. 小结

记录python程序中日志信息使用 logging 包来完成
logging日志等级有5个:
1. DEBUG
2. INFO
3. WARNING
4. ERROR
5. CRITICAL

打印(记录)日志的函数有5个:
1. logging.debug函数, 表示: 打印(记录)DEBUG级别的日志信息
2. logging.info函数, 表示: 打印(记录)INFO级别的日志信息
3. logging.warning函数, 表示: 打印(记录)WARNING级别的日志信息
4. logging.error函数, 表示: 打印(记录)ERROR级别的日志信息
5. logging.critical函数, 表示: 打印(记录)CRITICAL级别的日志信息

到此这篇关于Python中logging日志的四个等级和使用的文章就介绍到这了,更多相关Python logging日志内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python数据结构树和二叉树简介
Apr 29 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
Apr 17 Python
Python运行报错UnicodeDecodeError的解决方法
Jun 07 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
python中的decorator的作用详解
Jul 26 Python
Python wxPython库消息对话框MessageDialog用法示例
Sep 03 Python
Django Celery异步任务队列的实现
Jul 24 Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
Sep 18 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 Python
python munch库的使用解析
May 25 Python
Python+Selenium自动化环境搭建与操作基础详解
Mar 13 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 #Python
appium+python自动化配置(adk、jdk、node.js)
Nov 17 #Python
python调用百度API实现人脸识别
Nov 17 #Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 #Python
详解Pytorch显存动态分配规律探索
Nov 17 #Python
Python调用ffmpeg开源视频处理库,批量处理视频
Nov 16 #Python
python tkinter实现连连看游戏
Nov 16 #Python
You might like
几种显示数据的方法的比较
2006/10/09 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
深入浅析Python2.x和3.x版本的主要区别
2018/11/30 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
python 实现矩阵按对角线打印
2019/11/29 Python
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
2016/12/30 HTML / CSS
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
销售经理工作职责
2014/02/03 职场文书
数据保密承诺书
2014/06/03 职场文书
毕业实习证明(4篇)
2014/10/28 职场文书
社区党务工作总结2015
2015/05/19 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书