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简明入门教程
Aug 04 Python
Python编程实现删除VC临时文件及Debug目录的方法
Mar 22 Python
Python微信公众号开发平台
Jan 25 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
python redis 批量设置过期key过程解析
Nov 26 Python
容易被忽略的Python内置类型
Sep 03 Python
解决python3.6用cx_Oracle库连接Oracle的问题
Dec 07 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
详解Python模块化编程与装饰器
Jan 16 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
用Python爬虫破解滑动验证码的案例解析
May 06 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
解决js函数闭包内存泄露问题的办法
2016/01/25 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
简单了解前端渐进式框架VUE
2020/07/20 Javascript
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
一道python走迷宫算法题
2018/01/22 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
大学生职业生涯规划书模版
2013/12/30 职场文书
公司人力资源的自我评价
2014/01/02 职场文书
《走一步再走一步》教学反思
2014/02/15 职场文书
乔布斯斯坦福大学演讲稿
2014/05/23 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫
MySQL查询日期时间
2022/05/15 MySQL