logging模块,用于记录程序的运行情况,可将需要的信息打印到控制台或是日志文件中

1、Logger对象

Logger对象从来不会被直接使用,都是通过logging.getLogger(name)这个模块级函数获得它的实例对象,每次对同一个name调用这个函数都返回同一个Logger对象的引用
实例属性:propagate(默认1,即True),如果设置为False,则日志信息不会传给父类Logger,即logging.getLogger('a.b')默认会将信息传给logging.getLogger('a'),此时如果信息等级符合父类要求,同时也符合父类handler要求,则信息会再次被输出
实例方法:
setLevel(lvl):lvl等级为(NOTEST(0)<DEBUG(10)<INFO(20)<WARNING(30)<ERROR(40)<CRITICAL(50)),小于设置等级的信息不会传给handler
getEffectiveLevel():以整数方式返回设置的等级
isEnabledFor(lvl):判断lvl是否大于等于设置的等级
getChild(suffix):获得指定的子类Logger对象,即logging.getLogger('abc').getChild('def.ghi')等同于logging.getLogger('abc.def.ghi')
debug(msg, *args, **kwargs):log一个对应等级msg,msg可以是格式化字符串,需要的参数在args中给出,kwargs只接受两种关键字,exc_info(如果设置为True,就会添加异常信息到日志中,如果提供了通过sys.exc_info()返回的异常元组,直接使用它,否则就调用sys.exc_info()来获得异常信息)
info(msg, *args, **kwargs):同上
warning(msg, *args, **kwargs):同上
error(msg, *args, **kwargs):同上
critical(msg, *args, **kwargs):同上
Logger.log(lvl, msg, *args, **kwargs):同上,lvl为以整数形式指定的等级
exception(msg, *args, **kwargs):同上,除了kwargs中的exc_info不会被检查,强制为True,即总是会输出错误信息,这个方法只应该用在异常情况的处理上
addFilter(filt):添加filter对象
removeFilter(filt):移除filter对象
filter(record):用Logger对象的filter对象对record进行检测,只要一个为False,则不将信息传至handler
addHandler(hdlr):添加handler对象
removeHandler(hdlr):移除handler对象
findCaller():返回调用此对象的文件名,行号,函数名的3元元组
handle(record):将record传给所有与此Logger对象绑定的handler对象和他的父类(除非propagate为False)

2、Handler对象

它不会被直接实例化,是别的handler的基类,子类的__init__()方法都要调用Handler.__init__()
实例方法:
__init__(level=NOTSET):设置等级
createLock():创建线程锁
acquire():获得锁
release():释放锁
setLevel(lvl):设置等级
setFormatter(form):设置日志信息格式的Formatter对象
addFilter(filt):添加filter对象
removeFilter(filt):移除filter对象
filter(record):用Logger对象的filter对象对record进行检测,只要一个为False,则不将信息传至handler
flush():确保所有信息输出
close():清理被handler占用的资源
handle(record):根据filter选择性emit信息
handleError(record):此方法应在调用emit()抛出异常时使用,似乎是一个错误类
format(record):对record格式化
emit(record):不惜一切输出record的信息

3、Formatter对象

logging.Formatter(fmt=None, datefmt=None):fmt是格式化字符串,默认'%(message)s',datefmt是时间的格式,默认ISO8601
format(record):返回格式化后的字符串,record中的时间会先调用formattime
formatTime(record, datefmt=None):格式化时间
formatException(exc_info):把错误信息格式化

4、Filter对象

可以接受自己以及自己的子类
logging.Filter(name=”)

5、LogRecord对象

此对象是会自动由Logger对象生成的,也可以通过makeLogRecord生成
logging.LogRecord(name, level, pathname, lineno, msg, args, exc_info, func=None)
格式化字符串的格式如下
%(name)s:Logger的名字
%(levelno)s:数字形式的日志级别
%(levelname)s:文本形式的日志级别
%(pathname)s:调用日志输出函数的模块的完整路径名,可能没有
%(filename)s:调用日志输出函数的模块的文件名
%(module)s:调用日志输出函数的模块名
%(funcName)s:调用日志输出函数的函数名
%(lineno)d:调用日志输出函数的语句所在的代码行
%(created)f:当前时间,用UNIX标准的表示时间的浮点数表示
%(relativeCreated)d:输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s:字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d:线程ID。可能没有
%(threadName)s:线程名。可能没有
%(process)d:进程ID。可能没有
%(message)s:用户输出的消息
一般设置格式如下:
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'
或 '%(asctime)s - %(name)s - %(levelname)s - %(message)s'

6、几个内置的handler对象

logging.StreamHandler(stream=None):把信息输出到流中,sys.stdout、sys.stderr或任何的文件类对象,stream默认为sys.stderr
logging.FileHandler(filename, mode='a', encoding=None, delay=False):把信息输出到硬盘上的文件里
logging.NullHandler:什么也不做
logging.handlers.WatchedFileHandler(filename[, mode[, encoding[, delay]]]):Windows下不能用,用于监视一个文件是否有改变,如果有,就关闭并重新打开指定的文件,delay表示直到第一次调用emit后才打开文件
logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0):当日志文件超过了maxBytes大小,就在文件名后加上'.1','.2',直到指定的backupCount
logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False):设置间隔多久后重新创建新日志文件,when取值为's','m','h','d','w0'-'w6','midnight',不区分大小写,为星期几时interval被忽略
logging.handlers.SocketHandler(host, port):将信息发送至指定ip的端口上,有close(),emit(),handleError(),makeSocket(),makePickle(record),send(packet),createSocket()方法
logging.handlers.DatagramHandler(host, port):以UDP形式发送信息
logging.handlers.SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM):连接unix机器
logging.handlers.NTEventLogHandler(appname, dllname=None, logtype='Application'):
logging.handlers.SMTPHandler(mailhost, fromaddr, toaddrs, subject, credentials=None, secure=None):通过SMTP将日志以邮件方式发送
logging.handlers.BufferingHandler(capacity):将日志存在缓冲区中,当到达capacity大小时输出
logging.handlers.MemoryHandler(capacity, flushLevel=ERROR, target=None):同上
logging.handlers.HTTPHandler(host, url, method='GET'):将日志发送到网络服务器上

7、模块级别函数

logging.getLogger([name]):返回指定名字的Logger对象
logging.[debug/info/warning/error/critical/exception](msg[, *args[, **kwargs]]):创建对应等级的消息
logging.log(level, msg[, *args[, **kwargs]]):同上
logging.basicConfig([**kwargs]),参数支持如下:filename,filemode,format,datefmt,level,stream,设置root logger

8、logging.config模块

logging.config.dictConfig(config):从一个字典中获得配置信息
字典配置模式:
version - 1
formatters - 值为一个字典,每个键作为一个id,键的值为配置Formatter实例的信息
filters - 值为一个字典,每个键作为一个id,键的值为配置Filter实例的信息
handlers - 值为一个字典,每个键作为一个id,键的值为配置Handler实例的信息,配置字典会搜索 class(必须有),level,formatter,filters这4个关键字来构造handler
loggers - 值为一个字典,每个键作为一个id,键的值为配置Logger实例的信息,配置字典会搜索 level,propagate,filters,handlers这4个关键字来构造handler
root - 配置root Logger

logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True):从配置文件中获得配置信息
配置文件模式:
[loggers]
keys=root,log02,log03,log04,log05,log06,log07

[handlers]
keys=hand01,hand02,hand03,hand04,hand05,hand06,hand07,hand08,hand09

[formatters]
keys=form01,form02,form03,form04,form05,form06,form07,form08,form09

[logger_root]
level=NOTSET
handlers=hand01

[logger_parser]
level=DEBUG
handlers=hand01
propagate=1
qualname=compiler.parser

[handler_hand01]
class=StreamHandler
level=NOTSET
formatter=form01
args=(sys.stdout,)

[formatter_form01]
format=F1 %(asctime)s %(levelname)s %(message)s
datefmt=
class=logging.Formatter

logging.config.listen(port=DEFAULT_LOGGING_CONFIG_PORT):监听端口,接收配置文件,获得配置信息
logging.config.stopListening():停止监听

参考1:http://blog.csdn.net/zyz511919766/article/details/25136485/

参考2:http://www.cnblogs.com/MrFiona/p/5978898.html

Python2.7-logging模块的更多相关文章

  1. python2.7下使用logging模块记录日志到终端显示乱码问题解决

    刚才翻了翻2年以前用python2.7写的一个爬虫程序,主要功能就是把各地市知识产权局/专利局网站的专利相关项目.课题通知,定期爬取和分析,辅助企业进行项目申请. 这里要谈的不是爬虫功能的实现,而是今 ...

  2. Python中的日志管理Logging模块

    1.基本的用法 import logging logging.debug('This is debug message') logging.info('This is info message') l ...

  3. Python Logging 模块研究

    背景在一个新的项目里面加入了日志功能,想自己写一个,但是一个偶然的机会,通过google发现Python内建了一个非常强大的日志(log)模块:l... 背景 在一个新的项目里面加入了日志功能,想自己 ...

  4. 以打印日志为荣之logging模块详细使用

    啄木鸟社区里的Pythonic八荣八耻有一条: 以打印日志为荣 , 以单步跟踪为耻; 很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误.警告等信息输出,python ...

  5. python+selenium自动化软件测试(第9章) :Logging模块

    9.1 Logging模块 什么是日志记录?记录是跟踪运行时发生的事件的一种手段.该软件的开发人员将记录调用添加到其代码中,以指示某些事件已发生.事件由描述性消息描述,该消息可以可选地包含可变数据(即 ...

  6. python 的日志logging模块学习

    1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info messa ...

  7. python logging模块+ 个人总结

    原文地址:http://www.cnblogs.com/sislcb/archive/2008/11/25/1340627.html 从Python2.3版本中开始引入的logging模块为应用提供了 ...

  8. python3之xml&ConfigParser&hashlib&Subprocess&logging模块

    1.xml模块 XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. XML 被设计用来传输和存储 ...

  9. Python自建logging模块

    本章将介绍Python内建模块:日志模块,更多内容请从参考:Python学习指南 简单使用 最开始,我们用最短的代码体验一下logging的基本功能. import logging logger = ...

  10. os常用模块,json,pickle,shelve模块,正则表达式(实现运算符分离),logging模块,配置模块,路径叠加,哈希算法

    一.os常用模块 显示当前工作目录 print(os.getcwd()) 返回上一层目录 os.chdir("..") 创建文件包 os.makedirs('python2/bin ...

随机推荐

  1. Linux 安装Python虚拟环境,virtualenvwrapper

    virtualenvwrapper工具学习 1.因为virtualenv 工具使用的并不方便 2.安装virtualenvwrapper pip3 install -i https://pypi.do ...

  2. H5自适应屏幕分辨率大小

    说明: ①:H5自适应不同分辨率的设备,其实主要就一句 <meta name="viewport" content="width=device-width,init ...

  3. 排序算法(5)--Selection Sorting--选择排序[2]--Heap Sort--堆排序

    1.基本思想 具有n个元素的序列 (h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1) (i=1,2,...,n ...

  4. php递归获取无限分类菜单

    从数据库获取所有菜单信息,需要根据id,pid字段获取主菜单及其子菜单,以及子菜单下的子菜单,可以通过函数递归来实现. <?php class Menu { public $menu = arr ...

  5. 【Redis】Redis学习(一) Redis初步入门

    一.Redis基础知识 1.1 Redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字符串.哈希表.列表.集合.有序集合,位图,h ...

  6. CentOS配置yum源(补充)

    这是对yum命令的补充 Yum命令 一.用Centos镜像搭建本地yum源 由于安装centos后的默认yum源为centos的官方地址,所以在国内使用很慢甚至无法访问,所以一般的做法都是把默认的yu ...

  7. leetCode题解之Longest Palindrome

    1.题目描述 2.问题分析 直接用hash table 做就行. 3.代码 int longestPalindrome(string s) { ) ; map<char,int> m; f ...

  8. Ionic模版的使用

    Hybird HTML5 App(移动应用开发)之4.Ionic模版的使用 在Windows系统下使Ionic模版,可以使用之前安装的Git工具中的Git Bash.在Mac系统中可以直接使用系统自带 ...

  9. SQL SERVER怎样将某个服务器上面的数据自动备份到另一台服务器上面(异地备份)

    一:试验背景 异地备份好处:(待补充) 1:异地备份了把原有服务器数据放在另外一个位置,避免些物理损害.  比把数据刻录光盘和原始数据放同房间了房间失火了备份数据也没有了要放另外地方避免了  就是备份 ...

  10. MyEclipse优化设置(最详细版本)

    MyEclipse优化设置由于自己需要,在网上查了相关资料,现在总结如下: 本优化方法较全,希望能帮助到需要的人... 第一步: 取消自动validation validation有一堆,什么xml. ...