# -*-  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. win10实现移动热点共享WIFI

    电脑有线上网有WIFI网卡,想共享WIFI给手机还在为下载猎豹WIFI.360WIFI.WIFI共享精灵?担心密码泄露?担心网络安全?现在一切都不用烦恼.windows10系统自带热点共享 工具/原料 ...

  2. consul eureka区别(来自Consul官网)

    consul 与 eureka Eureka是一个服务发现工具.该体系结构主要是客户端/服务器,每个数据中心有一组Eureka服务器,通常每个可用区域一个.通常Eureka的客户使用嵌入式SDK来注册 ...

  3. 用ActivatedRoute获取url中的参数

    突然让我用ActivatedRoute import {Injectable} from "@angular/core"; import {ActivatedRoute} from ...

  4. 夏日炎炎 python写个天气预报

    东南地区连续突破历史,江浙沪除了包邮之外的另一福利-桑拿也已到手.这样的日子里是应该每日关注天气主义降暑避免出现热疾病,python包含比 较多的网络应用类这样就方便了一些网络应用的操作,之外还有些可 ...

  5. MySQL索引使用:字段为varchar类型时,条件要使用''包起来

    结论: 当MySQL中字段为int类型时,搜索条件where num='111' 与where num=111都可以使用该字段的索引.当MySQL中字段为varchar类型时,搜索条件where nu ...

  6. [Spring Data MongoDB]学习笔记--MongoTemplate插入修改操作

    插入操作: 直接给个例子 import static org.springframework.data.mongodb.core.query.Criteria.where; import static ...

  7. js 日期加一天

    经常在js 重要做时间加一的处理记录一下 ps:时间格式为:'2017-03-30' 一:源码: //时间加一天 function addDate(date, days) { if (days == ...

  8. Tarjan 求桥,割,强连通

    最近遇到了这种模板题,记录一下 tarjan求桥,求割 #include <bits/stdc++.h> using namespace std; #define MOD 99824435 ...

  9. 使用IDEA工具整合mybatis时使用@Resource和@Autowired自动注解bean时会显示红色问题的解决办法

    使用IDEA工具整合mybatis时使用@Resource和@Autowired自动注解bean时会显示红色问题的解决办法 idea中springboot整合mybatis时,通过@Autowired ...

  10. 获取html元素所在页面的坐标

    function findPosition(oElement) { var x2 = 0; var y2 = 0; var width = oElement.offsetWidth; var heig ...