2014年3月2日星期日

Logging 模块学习笔记

快速开始

日志级别 权值
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0

NOTSET外,logging模块提供了与级别名称对应的小写函数以便快速调用。
样例代码:

import logging

def main():
    logging.critical("critical")
    logging.error("error")
    logging.warning("warning")
    logging.info("info")
    logging.debug("debug")

if __name__ == '__main__':
    main()

输出:

CRITICAL:root:critical
ERROR:root:error
WARNING:root:warning

从输出可以注意到WARNING以下级别的信息并没有打印出来。
原因在于logging默认的级别是WARNING,可以通过logging.basicConfig函数或修改默认Logger对象来改变级别。
默认输出格式为:

级别:Logger对象名:日志

basicConfig函数

basicConfig函数可以快速定制默认Logger对象。

参数名

filename

指定日志文件的名称。

filemode

指定日志文件的打开方式,有wa两个选项,默认为a

format

指定输出的格式和内容,格式为:

%(名称)格式控制字符串

格式列表与其对应的类型

  • levelno s: 打印日志级别的数值
  • levelname s: 打印日志级别名称
  • pathname s: 打印当前执行程序的路径,其实就是sys.argv[0]
  • filename s: 打印当前执行程序名
  • funcName s: 打印日志的当前函数
  • lineno d: 打印日志的当前行号
  • asctime s: 打印日志的时间
  • thread d: 打印线程ID
  • threadName s: 打印线程名称
  • process d: 打印进程ID
  • message s: 打印日志信息

datefmt

指定时间格式,格式同time.strftime,影响formatasctime的格式。

level

设置日志级别,默认为logging.WARNING

stream

指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当streamfilename同时指定时,stream被忽略。

Logger对象

logging.getLogger函数返回一个Logger对象,函数接收一个字符串用以描述希望返回的Logger对象的名称,相同的名称全局唯一对应一个Logger对象。缺省参数为root,返回默认Logger对象。

Logger对象的方法

setLevel

设置该Logger对象的记录级别。
参数:

  1. level:级别枚举

log

打印指定级别的日志,须先设置handler。
参数:

  1. level:级别枚举。
  2. msg:希望打印的对象,会自动转为字符串。如果参数已是字符串,可以是格式字符串。
  3. *args:与msg结合成待打印内容(msg % args)

critical / error / warning / info / debug

指定对应级别的调用log
参数:

  1. msg:希望打印的对象,会自动转为字符串。如果参数已是字符串,可以是格式字符串。
  2. *args:与msg结合成待打印内容(msg % args)。

addHandler

Logger对象添加处理器,可添加多个。
参数:

  1. hdlr:处理器对象。

removeHandler

移除Logger对象的指定处理器。
参数:

  1. hdlr:处理器对象。

日志处理器

处理器用来扩展Logger对象,通过logger.addHandler(hdlr)方法加载到Logger对象。

模块集成处理器对象

  • logging.StreamHandler:日志输出到流,可以是sys.stderrsys.stdout或者文件。
  • logging.FileHandler:日志输出到文件。
  • logging.handlers.SocketHandler:远程输出日志到TCP/IP sockets。
  • logging.handlers.DatagramHandler: 远程输出日志到UDP sockets。
  • logging.handlers.SMTPHandler: 远程输出日志到邮件地址。
  • logging.handlers.SysLogHandler:日志输出到syslog。
  • logging.handlers.NTEventLogHandler:远程输出日志到Windows NT/2000/XP的事件日志。
  • logging.handlers.MemoryHandler:日志输出到内存中的制定buffer。
  • logging.handlers.HTTPHandler:通过GETPOST远程输出到HTTP服务器。
  • logging.handlers.BaseRotatingHandler:日志回滚。
  • logging.handlers.RotatingFileHandler:日志回滚,实际用。
  • logging.handlers.TimedRotatingFileHandler:日志回滚,实际用。

处理器使用简示

logging.StreamHandler

logging.StreamHandler对象构造参数缺省为sys.stdout,参数可以接收一个流对象(sys.stderrsys.stdout或者文件)。

sh1 = logging.StreamHandler()
sh2 = logging.StreamHandler(sys.stdout)
sh3 = logging.StreamHandler(open(file_path,"w")) # w 和 a 皆可

logging.StreamHandler 对象能够设置记录的日志级别,但实际输出受Logger对象的级别限制。Logger对象的级别制约着消息的派发,Handler对象的级别制约着记录。

sh2 = logging.setLevel(logging.WARING)
sh3 = logging.setLevel(logging.INFO)

logging.StreamHandler 对象能够自定义输出格式。

fmt = logging.Formatter("%(name)s:%(levelname)s:%(message)s")
sh1.setFormatter(fmt)

更多资料


@LYC
转载请注明出处

0 评论:

发表评论