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:\Users\10700\.spyder-py3\temp.py", line 28, in <module>
    raise ValueError("a 必须是数字")
ValueError: a 必须是数字

相关函数说明:

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

#举例:
>>> raise
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    raise
RuntimeError: No active exception to reraise
>>> raise ZeroDivisionError
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    raise ZeroDivisionError
ZeroDivisionError
>>> raise ZeroDivisionError("除数不能为零")
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    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/]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值