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的web框架编写前端模版的教程
Apr 30 Python
Python获取当前页面内所有链接的四种方法对比分析
Aug 19 Python
详解Django 时间与时区设置问题
Jul 23 Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 Python
pytorch中的embedding词向量的使用方法
Aug 18 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
Feb 25 Python
Python垃圾回收机制三种实现方法
Apr 27 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
用 python 进行微信好友信息分析
Nov 28 Python
Python列表元素删除和remove()方法详解
Jan 04 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
一些常用的php函数
2006/12/06 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
javascript 自动填写表单的实现方法
2010/04/09 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
2016/08/03 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
解决vue单页路由跳转后scrollTop的问题
2018/09/03 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
python模拟登陆阿里妈妈生成商品推广链接
2014/04/03 Python
Tornado 多进程实现分析详解
2018/01/12 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
Python实现中值滤波去噪方式
2019/12/18 Python
python内置模块collections知识点总结
2019/12/19 Python
python生成大写32位uuid代码
2020/03/03 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
医院办公室主任职责
2013/12/29 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
2015年工程师工作总结
2015/04/30 职场文书
表扬信格式模板
2015/05/05 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
golang中字符串MD5生成方式总结
2021/07/04 Golang
Python极值整数的边界探讨分析
2021/09/15 Python
Windows server 2016服务器基本设置
2022/08/14 Servers