建议47:使用logging记录日志信息
# -*- coding:utf-8 -*-
'''
Python中自带的logging 模块提供了日志功能,它将logger 的level 分为5 个级别 DEBUG 详细的信息,在追踪问题的时候使用
INFO 正常的信息
WARNING 一些不可预见的问题发生,或者将要发生,如磁盘空间低等,但不影响程序的运行
ERROR 由于某些严重的问题,程序中的一些功能受到影响
CRITICAL 严重的错误,或者程序本身不能够继续运行 logging lib 包含以下4 个主要对象: 1)logger。logger 是程序信息输出的接口,它分散在不同的代码中,使得程序可以在
运行的时候记录相应的信息,并根据设置的日志级别或filter 来决定哪些信息需要输出,并
将这些信息分发到其关联的handler。常用的方法有Logger.setLevel()、Logger.addHandler()、
Logger.removeHandler()、Logger.addFilter()、Logger.debug()、Logger.info()、Logger.
warning()、Logger.error()、etLogger() 等。 2)Handler。Handler 用来处理信息的输出,可以将信息输出到控制台、文件或者网络。
可以通过Logger.addHandler() 来给logger 对象添加handler,常用的handler 有StreamHandler
和FileHandler 类。StreamHandler 发送错误信息到流,而FileHandler 类用于向文件输出日志
信息,这两个handler 定义在logging 的核心模块中。其他的handler 定义在logging.handles
模块中,如HTTPHandler、SocketHandler。 3)Formatter。决定log 信息的格式,格式使用类似于%(< dictionary key >)s 的形式来
定义,如'%(asctime)s - %(levelname)s - %(message)s',支持的key 可以在Python 自带的文档
LogRecord attributes 中查看。 4)Filter。用来决定哪些信息需要输出。可以被handler 和logger 使用,支持层次关系,
比如,如果设置了filter 名称为A.B 的logger,则该logger 和其子logger 的信息会被输出,
如A.B、A.B.C. logging.basicConfig([**kwargs]) 提供对日志系统的基本配置,默认使用StreamHandler 和
Formatter 并添加到root logger,该方法自Python2.4 开始可以接受字典参数,参数如下: filename 指定FileHandler 的文件名,而不是默认的StreamHandler
filemode 打开文件的模式,同open 函数中的同名参数,默认为’a’
format 输出格式字符串
datefmt 日期格式
level 设置根logger 的日志级别
stream 指定StreamHandler。这个参数若与filename 冲突,忽略stream
'''
import traceback
import sys
import logging
gList = ['a','b','c','d','e','f','g']
logging.basicConfig( # 配置日志的输出方式及格式
level=logging.DEBUG,
filename='C:\\log.txt',
filemode='a',
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
)
def f():
gList[5]
logging.info('[INFO]:calling method g() in f()')# 记录正常的信息
return g()
def g():
logging.info('[INFO]:calling method h() in g()')
return h()
def h():
logging.info('[INFO]:Delete element in gList in h()')
del gList[2]
logging.info('[INFO]:calling method i() in h()')
return i()
def i():
logging.info('[INFO]:Append element i to gList in i()')
gList.append('i')
print gList[7] if __name__ == '__main__':
logging.debug('Information during calling f():')
try:
f()
except IndexError as ex:
print "Sorry,Exception occured,you accessed an element out of range"
traceback.print_exc()
ty,tv,tb = sys.exc_info()
logging.error("[ERROR]:Sorry,Exception occured,you accessed an \
element out of range")# 记录异常错误信息
logging.critical('object info:%s' %ex)
logging.critical('Error Type:{0},Error Information:{1}'.format(ty, tv))
# 记录异常的类型和对应的值
logging.critical(''.join(traceback.format_tb(tb)))# 记录具体的trace 信息
sys.exit(1)
建议47:使用logging记录日志信息的更多相关文章
- 在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息
在我们常规的调试或者测试的时候,喜欢把一些测试信息打印在控制台或者记录在文件中,对于.netframework项目来说,我们输出控制台的日志信息习惯的用Console.WriteLine来输出查看,不 ...
- 编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议47~51)
建议47:在equals中使用getClass进行类型判断 本节我们继续讨论覆写equals的问题,这次我们编写一个员工Employee类继承Person类,这很正常,员工也是人嘛,而且在JavaBe ...
- 用log4net记录日志信息
在.net中用log4net记录日志信息,已经是很平常的事情了. log4net下载:http://logging.apache.org/log4net/download_log4net.cgi 百度 ...
- logging记录日志
日志是一个系统的重要组成部分,用以记录用户操作.系统运行状态和错误信息.日志记录的好坏直接关系到系统出现问题时定位的速度.logging模块Python2.3版本开始成为Python标准库的一部分. ...
- Python logging记录日志
Python logging记录日志 调试的几种方法: 使用print()在控制台上输出 使用assert断言 使用logging模块 logging提供了一组便利的函数,用来做简单的日志,(当然也能 ...
- 将不同级别的logging 日志信息写入不同文件
将不同级别的logging 日志信息写入不同文件 # -*- coding: utf-8 -*- import os import time from logging.handlers import ...
- 编写高质量代码改善C#程序的157个建议——建议47:即使提供了显式释放方法,也应该在终结器中提供隐式清理
建议47:即使提供了显式释放方法,也应该在终结器中提供隐式清理 在标准的Dispose模式中,我们注意到一个以~开头的方法,如下: /// <summary> /// 必须,防止程序员忘记 ...
- django使用logging记录日志
django使用logging记录日志,我没有用这方式去记录日志,主要还是项目小的原因吧, 有机会遇见大项目的话可以回头研究. 配置setting.py配置文件 import logging impo ...
- .NET Core下的日志(1):记录日志信息
记录各种级别的日志是所有应用不可或缺的功能.关于日志记录的实现,我们有太多第三方框架可供选择,比如Log4Net.NLog.Loggr和Serilog 等,当然我们还可以选择微软原生的诊断机制(相关A ...
随机推荐
- 如何添加、删除、合并PDF文件里的页面?
使用Adobe Acrobat. Adobe中文官网http://www.adobe.com/cn/products/acrobat.html 能够自己下载破解版. watermark/2/text/ ...
- zeppelin部署
1.下载解压2.修改conf/zeppelin-env.sh,添加如下两行 export ZEPPELIN_PORT= export MASTER=spark://master:7077 3.启动 b ...
- python 函数 参数 (难点传入dict list)
--使用参数组可以传值列表,字典:格式 #-*-coding:utf-8-*- def func5(x,*s,**gs): print(x) print(s) print(gs) print '*'* ...
- 对asp.net缓存 的深入了解
一.缓存概念,缓存的好处.类型.-------------------------------------------------------------------------------- ...
- Linux C 获取系统时间信息
比如获取当前年份: /* 获取当前系统时间 暂时不使用 ; ; time_t now; struct tm *timenow; time(&now); timeno ...
- python 数学操作符
优先级从高到低 print("2 ** 3 = %d" % 2 ** 3) 2 ** 3 = 8print("7 % 2 = {}".format(7 % 2) ...
- 求割点模板(可求出割点数目及每个割点分割几个区域)POJ1966(Cable TV Network)
题目链接:传送门 题目大意:给你一副无向图,求解图的顶点连通度 题目思路:模板(图论算法理论,实现及应用 P396) Menger定理:无向图G的顶点连通度k(G)和顶点间最大独立轨数目之间存在如下关 ...
- 《从零开始学Swift》学习笔记(Day 16)——字典集合
原创文章,欢迎转载.转载请注明:关东升的博客 Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素.字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合 ...
- 关东升的《iOS实战:图形图像、动画和多媒体卷(Swift版)》上市了
关东升的<iOS实战:图形图像.动画和多媒体卷(Swift版)>上市了 承蒙广大读者的厚爱我的<iOS实战:图形图像.动画和多媒体卷(Swift版)>京东上市了,欢迎广大读者提 ...
- 《从零开始学Swift》学习笔记(Day 11)——数据类型那些事儿?
原创文章,欢迎转载.转载请注明:关东升的博客 在我们学习语言时都会学到这种语言的数据类型,在Swift中数据类型有那些呢?整型.浮点型.布尔型.字符.字符串这些类型是一定有的,其中集合. ...