zoukankan      html  css  js  c++  java
  • 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'

    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

    ---------------- 坚持每天学习一点点
  • 相关阅读:
    ini_set /ini_get函数功能-----PHP
    【转】那个什么都懂的家伙
    word 2007为不同页插入不同页眉页脚
    August 26th 2017 Week 34th Saturday
    【2017-11-08】Linux与openCV:opencv版本查看及库文件位置等
    August 25th 2017 Week 34th Friday
    August 24th 2017 Week 34th Thursday
    August 23rd 2017 Week 34th Wednesday
    August 22nd 2017 Week 34th Tuesday
    August 21st 2017 Week 34th Monday
  • 原文地址:https://www.cnblogs.com/tccbj/p/7652653.html
Copyright © 2011-2022 走看看