# -*-  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记录日志信息的更多相关文章

  1. 在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息

    在我们常规的调试或者测试的时候,喜欢把一些测试信息打印在控制台或者记录在文件中,对于.netframework项目来说,我们输出控制台的日志信息习惯的用Console.WriteLine来输出查看,不 ...

  2. 编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议47~51)

    建议47:在equals中使用getClass进行类型判断 本节我们继续讨论覆写equals的问题,这次我们编写一个员工Employee类继承Person类,这很正常,员工也是人嘛,而且在JavaBe ...

  3. 用log4net记录日志信息

    在.net中用log4net记录日志信息,已经是很平常的事情了. log4net下载:http://logging.apache.org/log4net/download_log4net.cgi 百度 ...

  4. logging记录日志

    日志是一个系统的重要组成部分,用以记录用户操作.系统运行状态和错误信息.日志记录的好坏直接关系到系统出现问题时定位的速度.logging模块Python2.3版本开始成为Python标准库的一部分. ...

  5. Python logging记录日志

    Python logging记录日志 调试的几种方法: 使用print()在控制台上输出 使用assert断言 使用logging模块 logging提供了一组便利的函数,用来做简单的日志,(当然也能 ...

  6. 将不同级别的logging 日志信息写入不同文件

    将不同级别的logging 日志信息写入不同文件 # -*- coding: utf-8 -*- import os import time from logging.handlers import ...

  7. 编写高质量代码改善C#程序的157个建议——建议47:即使提供了显式释放方法,也应该在终结器中提供隐式清理

    建议47:即使提供了显式释放方法,也应该在终结器中提供隐式清理 在标准的Dispose模式中,我们注意到一个以~开头的方法,如下: /// <summary> /// 必须,防止程序员忘记 ...

  8. django使用logging记录日志

    django使用logging记录日志,我没有用这方式去记录日志,主要还是项目小的原因吧, 有机会遇见大项目的话可以回头研究. 配置setting.py配置文件 import logging impo ...

  9. .NET Core下的日志(1):记录日志信息

    记录各种级别的日志是所有应用不可或缺的功能.关于日志记录的实现,我们有太多第三方框架可供选择,比如Log4Net.NLog.Loggr和Serilog 等,当然我们还可以选择微软原生的诊断机制(相关A ...

随机推荐

  1. SlidingMenu官方实例分析8——CustomAnimation

    CustomAnimation 构造方法: 其中CanvasTransformer对象是重点,因为他是实现动画的对象,设置对象的代码如下: 其中变化方法如下: 其中的canvas.scale(),方法 ...

  2. react手记(componentWillMount,componentDidMount等)

    生命周期componentWillMount 组件出现前 就是dom还没有渲染到html文档里面componentDidMount 组件渲染完成 已经出现在dom文档里可以再各个周期实现特定的操作 生 ...

  3. iOS学习笔记(十)——iOS真机调试

    前面一直使用模拟器运行,今天使用了真机调试,这一篇介绍一下真机调试.真机调试需要99$注册,如果有注册过的账号,也可以使用注册账号邀请你加入一个账号下,注册账号可以给你分配权限,我也是使用的邀请成为开 ...

  4. Android UI开发第二十八篇——Fragment中使用左右滑动菜单

    Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...

  5. 编写自己的ls命令

    ····要编写ls命令,首先要了解它能做什么,完成了什么工作,是如何完成这些工作的····  一.ls命令能做什么? 我们在命令行输入ls,ls默认找出当前目录中所有文件的文件名,并且按照字典序排序后 ...

  6. [Sdoi2011]火星移民

    2283: [Sdoi2011]火星移民 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 119  Solved: 56[Submit][Status] ...

  7. 《从零开始学Swift》学习笔记(Day 32)——计算属性

    原创文章,欢迎转载.转载请注明:关东升的博客 计算属性本身不存储数据,而是从其他存储属性中计算得到数据. 计算属性概念: 计算属性提供了一个getter(取值访问器)来获取值,以及一个可选的sette ...

  8. pycharm 调试django 服务端断点调试

    django  runserver 服务端断电调试 D:\model\gitlab\eebo.ehr.analysis\venv\Scripts\python.exe "C:\Program ...

  9. jenkins配置SVN报错

    jenkins配置SVN报错,如图:

  10. Vue中获取dom元素

    Vue.js虽然说是数据驱动页面的,但是有时候我们也要获取dom对象进行一些操作. vue的不同版本获取dom对象的方法不一样 Vue.js  1.0版本中,通过v-el绑定,然后通过this.els ...