• 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

    ---------------- 坚持每天学习一点点
  • 相关阅读:
    一起学爬虫(Python) — 02
    模块(第1章)实验——编译问题(没有规则可以创建目标“modules”)
    linux 启动时,sendmail 长时间等待
    红帽发布首个RHEL 7测试版本
    AMD:引入ARM将是自64位以来的最大变革
    (OK) Windows XP 硬盘安装 RHEL7/CentOS7/Fedora19/Fedora20
    Windows 7 硬盘安装 RHEL7/CentOS7/Fedora19/Fedora20
    linux-0.11内核调试运行阅读环境的搭建及使用
    rhel 7—— /boot/grub2/grub.cfg
    Linux环境下网络编程杂谈
  • 原文地址:https://www.cnblogs.com/tccbj/p/7652653.html
Copyright © 2020-2023  润新知