python log日志级别_Python中logging日志的四个等级和使用_weixin_39916681的博客-程序员秘密

技术标签: python log日志级别  

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级别的⽇志信息")

运行结果:

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日志内容请搜索云海天教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持云海天教程!

原文链接:https://blog.csdn.net/lh_hebine/article/details/99200152

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39916681/article/details/112895206

智能推荐

Bootstrap中的utilities(工具类)_bootstrap utilities_Magic-JJ的博客-程序员秘密

变成弹性盒模型:d-flex/d-inline-flex 变成响应式的弹性盒模型:d-{breakpoint}-flex/inline-flex 子元素的排列方向: 1.flex-row 正序水平排列 2.flex-row-reverse 倒序水平排列 3.flex-column 正序垂直排列 4.flex-column..

urlRewriteFilter_courage89的博客-程序员秘密

urlRewriteFileter 是apache的一个jar包,主要功能如其名:实现url的重定向。其他功能参考其相关文档,截取部分入下:URL Tidyness / URL Abstraction - keep URLs tidy irrespective of the underlying technology or framework (JSP, Servlet, St

【转】机器学习最佳入门学习资料汇总_炒饭君的博客-程序员秘密

机器学习最佳入门学习资料汇总 专为机器学习初学者推荐的优质学习资源,帮助初学者快速入门。 这篇文章的确很难写,因为我希望它真正地对初学者有帮助。面前放着一张空白的纸,我坐下来问自己一个难题:面对一个对机器学习领域完全陌生的初学者,我该推荐哪些最适合的库,教程,论文及书籍帮助他们入门? 资源的取舍很让人纠结,我不得不努力从一个机器学习的程序员和初学

问题:gnutls_handshake() failed Handshake failed_淡定的小龟的博客-程序员秘密

项目场景:才开始接触firefly的AIO-3288J这个板卡,老老实实安装新手上路的文档进行操作,编译环境的操作系统选择的是Ubuntu1404,不敢选新版本怕出问题没法弄。问题描述:在进行SDK的解压获取最新代码时发生了错误:[email protected]:/opt/firefly-rk3288-lollipop$ git pull bitbucket Firefly-RK3288:Firefly-RK3288fatal: unable to access 'https://b

SVN客户端无法连接SVN服务器,主机积极拒绝_svn无法连接主机,由于目标计算机积极拒绝_徐小慧_Blog的博客-程序员秘密

svn客户端无法连接SVN服务器,主机积极拒绝一、出现的情况二、原因三、解决办法1. 确定SVN的地址有没有输入错误2. 被访问的SVN服务有没有启动成功;3. HTTP服务有没有启动4. 防火墙没有SVN的端口号3690的解决方法一、出现的情况执行上下文错误:由于目标计算机积极拒绝,无法连接。二、原因确定SVN的地址有没有输入错误被访问的SVN服务有没有启动成功;HTTP服务有没有启动防火墙没有SVN的端口号3690的解决方法三、解决办法1. 确定SVN的地址有没有输入错误自行检

项目源码--Android本地音乐播放器_weixin_30333885的博客-程序员秘密

下载源码技术要点:1.本地音乐播放与管理2.支持在线下载3.非库音频流的解码4. UI控件的综合使用5. HTTP通信模块6. Mysql数据库的综合使用7. 后台服务技术8. 源码带详细的中文注释......详细介绍:1.本地音乐播放与管理 播放器具有本地音乐的播放与管理功能.可播放音乐,支持播放,暂停,上一首,...

随便推点

优秀的 Verilog/FPGA开源项目介绍(九)- DP(增改版)_碎碎思的博客-程序员秘密

优秀的 Verilog/FPGA开源项目介绍(九)- DP(增改版)在相量子的建议下修改了一下文章及更改了部分内容,同时增加了新的分享内容。DP即DisplayPort,是一种高清数字显示...

java程序中Dimensiond=Toolkit.getDefaultToolkit().getscreensize;是什么意思_javaPie的博客-程序员秘密

java程序中Dimensiond=Toolkit.getDefaultToolkit().getscreensize;是什么意思2010-12-01 10:35匿名 | 分类:JAVA相关 | 浏览3140次分享到:2010-12-01 11:05网友采纳就是得到你屏幕的大小,这样之后就可以确定你程序要在屏幕的什么位置了!

OpenStack+Ceph存储空间回收_大lao虎的博客-程序员秘密

在OpenStack的部署中,开源分布式存储Ceph大行其道,Ceph支持Thinprovision,但是用户删除文件以后,在ceph中这部分空间并没有真正释放,这篇博文就讲述Linux的Discard/Trim空间回收机制,及其在OpenStack+Ceph部署中如何实现存储空间回收。

致远OA任意管理员登陆漏洞分析_致远oa任意用户登录_Sword-heart的博客-程序员秘密

随着中国最大的安全产品性能检测以及人体体能极限挑战活动的到来,各路大佬都八仙过海各显神通。同时大量的0day被公开,排除那些被辟谣的,还有很多值得学习的漏洞。致远这是个组合漏洞,首先任意管理员登陆,然后后台getshell。因为前台漏洞相对来说危害较高,这里着重分析下前台这个漏洞。致远oa使用spring的自动装配,通过在xml文件中搜索漏洞url中的,可以快速定位到漏洞类。根据exp找到存在问题的方法。找到该方法后基本上可以一眼看到漏洞点了,在该方法的最下方,这里的memberId是可控的。首先通过

迪杰斯特拉算法求图的某个顶点到其他顶点的最短路径问题_疯狂的小蜗的博客-程序员秘密

迪杰斯特拉算法:使用图的广度优先遍历算法,比如先从G点出发,找到能与G直接连接的顶点,然后才从与G最近的A出发,找到与A相邻的节点。通过比较G到每个顶点的距离大小,才选出到每个点的最短路径代码:/** * 迪杰斯特拉算法球最短路径问题 */public class Dijkstra { public static void main(String[] args) { ...

Python编程思想(19):可变参数也可以这样玩_蒙娜丽宁的博客-程序员秘密

很多编程语言都允许定义个数可变的参数,这样可以在调用函数时传入任意多个参数。 Python当然也不例外,Python允许在形参前面添加一个星号(*),这样就意味着该参数可接收多个参数值,多个参数值被当成元组传入。下面程序定义了一个形参个数可变的函数。

推荐文章

热门文章

相关标签