栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Logging学习

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Logging学习

Logging System

使用户 在需要记录debugging notes、一般信息、warnings、errors等 的方法上 创建一个或多个logger对象;不同的logging 'levels’可以用来区分重要和非重要的信息;
存在不同的逻辑日志流,使得:1.不用四处传递日志对象引用;2. 在运行过程中系统is configurable,允许在不影响运行程序的前提下调整日志记录的类型和级别;
不同级别由低到高:DEBUG、INFO、WARN、ERROR(exception抛出)、CRITICAL

举例:如何产生简单的logging output on stderr

#mymodule.py
import logging
#表示用logging对当前文件的执行进行记录
log = logging.getLogger('Mymodule')


def doIt():
	#在程序运行过程总记录debug类型,记录为:DEBUG:MyModule: Doin' stuff...
	log.debug("Doin' stuff...")
	#do stuff...
	#手动抛出异常 类型 TypeError 具体信息“...”
	raise TypeError,'Bogus type erroe for testing'
#myapp.py
import mymodule,logging
#使用基本格式记录信息 basicConfig
logging.basicConfig()
#表示记录的是MyApp文件的信息
log=logging.getLogger('MyApp')
#记录Info类型: INFO:MyApp: Starting my app
log.info("Starting my app")
try:
	mymodule.doIt()
#将mymodule.doIt中抛出的异常作为 e
except Exception as e:
	#记录exception:ERROR:MyApp: There was a problem. 回溯到MyModule文件中error发生的位置
	log.exception("There was a problem.")
#写入信息:INFO:MyApp: Ending my app
log.info("Ending my app")

MyApp.py的log记录结果为:

INFO:MyApp: Starting my app
DEBUG:MyModule: Doin' stuff...
ERROR:MyApp: There was a problem.
Traceback (most recent call last):
        File "myapp.py", line 9, in ?
                mymodule.doIt()
        File "mymodule.py", line 7, in doIt
                raise TypeError, "Bogus type error for testing"
TypeError: Bogus type error for testing

INFO:MyApp: Ending my app

MyApp.py在spyder中的实际运行结果为: 且之后的程序仍能正常运行

输入一个数:a
ERROR:MyApp:There was a problem.
Traceback (most recent call last):
  File "C:Users10700.spyder-py3temp.py", line 28, in 
    raise ValueError("a 必须是数字")
ValueError: a 必须是数字

相关函数说明:

# raise:实现 手动 抛出程序正常运行中产生异常的函数 具体使用:
raise #引发当前上下文中捕获的异常
raise + 异常类名称 #表示 引发执行类型的异常
raise + 异常类名称 (描述信息)# 表示 引发执行类型的异常,附带更具体的异常描述信息

#举例:
>>> raise
Traceback (most recent call last):
  File "", line 1, in 
    raise
RuntimeError: No active exception to reraise
>>> raise ZeroDivisionError
Traceback (most recent call last):
  File "", line 1, in 
    raise ZeroDivisionError
ZeroDivisionError
>>> raise ZeroDivisionError("除数不能为零")
Traceback (most recent call last):
  File "", line 1, in 
    raise ZeroDivisionError("除数不能为零")
ZeroDivisionError: 除数不能为零
#直接使用raise抛出异常会导致程序崩溃,无法运行下去,因此常将raise和try except异常处理结构连用来捕获并进行处理
try:
    a = input("输入一个数:")
    #判断用户输入的是否为数字
    if(not a.isdigit()):
        raise ValueError("a 必须是数字")
    d=3
except ValueError as e:
    print("引发异常:",repr(e))
c=5
#这一段程序运行的输出是  c=5 没有d的值;在try中执行“raise”,即手动抛出异常后,try的执行终止,转而执行except代替try后面的语句;
#except代替raise抛出异常,后面的语句正常执行
#参考:http://c.biancheng.net/view/2360.html

Summary:Logging的作用在于记录,重点是记录异常

[参考:https://peps.python.org/pep-0282/]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/884360.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号