Python2.7-logging模块
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'
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
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模块的更多相关文章
- python2.7下使用logging模块记录日志到终端显示乱码问题解决
刚才翻了翻2年以前用python2.7写的一个爬虫程序,主要功能就是把各地市知识产权局/专利局网站的专利相关项目.课题通知,定期爬取和分析,辅助企业进行项目申请. 这里要谈的不是爬虫功能的实现,而是今 ...
- Python中的日志管理Logging模块
1.基本的用法 import logging logging.debug('This is debug message') logging.info('This is info message') l ...
- Python Logging 模块研究
背景在一个新的项目里面加入了日志功能,想自己写一个,但是一个偶然的机会,通过google发现Python内建了一个非常强大的日志(log)模块:l... 背景 在一个新的项目里面加入了日志功能,想自己 ...
- 以打印日志为荣之logging模块详细使用
啄木鸟社区里的Pythonic八荣八耻有一条: 以打印日志为荣 , 以单步跟踪为耻; 很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误.警告等信息输出,python ...
- python+selenium自动化软件测试(第9章) :Logging模块
9.1 Logging模块 什么是日志记录?记录是跟踪运行时发生的事件的一种手段.该软件的开发人员将记录调用添加到其代码中,以指示某些事件已发生.事件由描述性消息描述,该消息可以可选地包含可变数据(即 ...
- python 的日志logging模块学习
1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info messa ...
- python logging模块+ 个人总结
原文地址:http://www.cnblogs.com/sislcb/archive/2008/11/25/1340627.html 从Python2.3版本中开始引入的logging模块为应用提供了 ...
- python3之xml&ConfigParser&hashlib&Subprocess&logging模块
1.xml模块 XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. XML 被设计用来传输和存储 ...
- Python自建logging模块
本章将介绍Python内建模块:日志模块,更多内容请从参考:Python学习指南 简单使用 最开始,我们用最短的代码体验一下logging的基本功能. import logging logger = ...
- os常用模块,json,pickle,shelve模块,正则表达式(实现运算符分离),logging模块,配置模块,路径叠加,哈希算法
一.os常用模块 显示当前工作目录 print(os.getcwd()) 返回上一层目录 os.chdir("..") 创建文件包 os.makedirs('python2/bin ...
随机推荐
- java中return、break、continue的区别
1.return @Testpublic void testReturn(){ for (int j = 1; j < 3; j++) { for (int i = 1; i < 5; i ...
- js 函数中形参与实参的关系
函数中形参与实参的关系 对于形参和实参的定义,在 权威指南中有着明确的定义.但是,我们更在意的是它们之间的关系,到底形参会不会影响到实参? 形参到底会不会影响到实参? 对于这个问题的答案,请先看以下两 ...
- AngularJS图片上传功能实践
逻辑理清楚了:service提供FileReader函数,directive提供点击事件的绑定和监听,controller用来修改html上的ng-src属性值 1.HTML <input ty ...
- <Android 基础(三十四)> TabLayout 从头到脚
1. 简介 1.TabLayout给我们提供的是一排横向的标签页 2.#newTab()这个方法来创建新的标签页,然后用过#setText()和#setIcon方法分别修改标签页的文本和图标,创建完成 ...
- Microsoft MVP MSDN Magazine 最新期分享
下载地址:http://1105insight.com/portal/wts/uemcmQeeDyaq%5Ev2gAe6c3b0Djd 可在线或下载查看
- ActiveReports 报表应用教程 (14)---数据可视化
葡萄城ActiveReports报表中提供了丰富的数据可视化解决方案,用户可以将数据以图像化的方式进行显示,让报表数据更加形象且便于理解.在葡萄城ActiveReports报表中提供了大多数常用的二维 ...
- php 实现简单加入购物车(1)
这个购物车相对来说比较简单,用于短暂存储,并没有存储到数据库,购物车对于爱网购的人来说简直是熟悉的不能再熟悉了,在写购物车之前,我们首先要构思一下,我们需要先从数据库中调出一张表格,这里我 ...
- linux svn配置与使用
svn错误码对照表: http://docs.sharpsvn.net/current/html/T_SharpSvn_SvnErrorCode.htm https://www.cnblogs ...
- 解决ci框架php发送邮件附件中文乱码问题
CI框架发送邮件附件中文出现乱码,是因为php basename()函数不支持中文引起,修改类库 Email.php 文件中 _append_attachments()方法,大致在 1474行 添加如 ...
- jsp 发布war 包到Tomcat
1.将项目打包成war,打包过程这里不做赘述 2.在linux或者windows下安装xmapp 3.打开Tomcat下conf/server.xml,在host下添加一行 <Co ...