Python之日志操作(logging)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Python之⽇志操作(logging)import logging
1、⾃定义⽇志级别,⽇志格式,输出位置
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s | %(levelname)s| %(message)s‘,%(name)s root log是?
filename='filepath'
filemode='w'
)
level :指定root logger的⽇志级别(DEBUG)
format:⽇志格式
filename:⽂件写⼊的路径
filemode:末填写,默认是追加⽅式’a‘
⽇志级别排序:CRITICAL>ERROR>WARNING>INFO>DEBUG>NOTEST
logging.debug('debug info')
('info log')
logging.warning('warning log')
logging.error('error log')
级别从低到⾼
结果:
2017-06-25 09:12:00,025 | DEBUG| debug info
2017-06-25 09:12:00,025 | INFO| info log
2017-06-25 09:12:00,025 | WARNING| warning log
2017-06-25 09:12:00,025 | ERROR| error log
(1)format:指定handler使⽤的⽇志显⽰格式,即⽇志打印的格式字符串。


⽤到的格式化串:
%(name)s:Logger的名字;
%(levelno)s:⽇志级别的数值;
%(levelname)s:⽇志级别名称;
%(pathname)s:当前执⾏程序的路径,其实就是sys.argv[0],可能没有;
%(filename)s:调⽤⽇志输出函数的模块的⽂件名;
%(module)s:当前执⾏程序的程序名;
%(funcName)s:⽇志输出函数的函数名;
%(lineno)d:⽇志输出函数的语句所在的代码⾏;
%(created)f:当前时间,⽤UNIX标准的表⽰时间的浮点数表⽰;
%(relativeCreated)d:输出⽇志信息时的,⾃Logger创建以来的毫秒数;
%(asctime)s:字符串形式的当前时间。

默认格式是 “2016-06-06
16:49:45,896”。

逗号后⾯的是毫秒;
%(thread)d:线程ID。

可能没有;
%(threadName)s:线程名。

可能没有;
%(process)d:进程ID。

可能没有;
%(message)s:⽤户输出的消息;
2、基础知识
(1)root log是所有⽇志实例的祖先
(2)其他的⽇志实例通过logging.getLogger('logname')来获取实例
(3)⼦节点会继承root log 的所有属性
(4)⽇志具有传递性,在⼦节点上写的⽇志,会继承⽗节点的⽇志handler,并处理。

(5)对于⼀个logger,可以设置fileHandler和streamhandler
FileHandler:⽤于写⼊⽇志⽂件
StreamHander:⽤于输出到控制台
(6)对于⼀个logger,可以设置Formatter(输出的格式)
logging.Filter(name) 过滤出需要的⽇志,使⽤率⽐较低
root Logger的⼦孙logger的消息不仅会发送给他们⾃⼰的handler处理,还会发送给其所有的祖
先处理。

log1=logging.getLogger('log1') 如果没有名字,默认为root
log1.setLevel()
fh=logging.FileHandler('path')
sh=logging.StreamHandler()
fmt=logging.Formatter('%(asctime)s|%(name)s|%(filename)s|%(levelname)s|%(message)s')
fh.setFormatter(fmt)
sh.setFormatter(fmt)
log1.addHandler(fh)
log1.addHandler(sh)
log2=logging.getLogger('log1.log2') log1是log2的⽗节点
('log2 info msg')
('handler log test')
root默认有streamhandler,
3、root log 是全局唯⼀的
对root log进⾏配置的时候(使⽤logging.basicConfig来配置),后⾯的配置会覆盖前⾯的只⽤root log的弊端
(1)FileHandle 和 StreamHandle不能并存,使⽤不⽅便
filename='path' #FileHandle
stream=sys.stdout #StreamHandle 输⼊到控制台
(2)不能配置多个FileHandle
4、⽇志⾃动分⽂档存储
import logging
import logging.handlers
rootLog=logging.getLogger()
rootLog.setLevel(logging.DEBUG)
fh=logging.handlers.RotatingFileHandler('path',maxBytes=512,backupCount=3) maxBytes:每个⽇志最⼤的存储空间
backupCount:可以备份三个⽇志
fmt=fh.setFormatter(fmt)
rootLog.addHandler(fh)
for i in xrange(10000):
('info log')
5、⽇志操作:logging模块提供的⽇志处理组件
(1)Logger :提供应⽤程序可直接使⽤的接⼝
(2)Handler :发送⽇志到适当的⽬的地
(3)Filter :提供了过滤⽇志信息的⽅法
logging.Filter('name')
把log为name的实例和该实例下的所有⼦实例的log显⽰出来
(4)Formatter :指定⽇志显⽰格式。

相关文档
最新文档