python语言中logger模块的学习笔记

python语言中logger模块的学习笔记

logging模块的介绍

Python的logging模块提供了通用的日志系统,使用logging模块可以方便开发者记录日志,还可以自定义日志的级别,并可以采用不同的方式记录日志,比如文件,HTTP、GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式。

logging模块的结构

logging模块包括:logger,handler,fltter,formatter这四个基本概念。

  1. logger:提供日志的接口供代码应用,logger模块最常用的操作主要有两类:配置和发送日志消息,可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。
    logger对象扮演三重角色;
    它给应用程序暴漏了几个方法,以便应用程序能在运行时记录日志。
    Logger对象根据日志的级别或根据Filter对象,来决定记录哪些日志。
    Logger对象负责把日志信息传递给相关的handler。
    在logger中,最常用的方法有两种:configuration,messing sending
    cinfiguration方法包括;setLevel(level),用来设置日志的级别。如果用例的界别低于setLevel(level)方法这是的值,那么logger就不会处理它

  2. handler:将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。
    logging.StreamHandler:日志输出到流
    logging.FileHander;日志输出到文件
    logging.handlers.RotatingFileHandler:日志回滚方式
    logging.handlers.TimedRotatingFileHandler:日志回滚方式
    ogging.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: 通过"GET"或"POST"远程输出到HTTP服务器

  3. filter:提供一种优雅的方式,决定一个日志记录是否发送到handler。
    Filter对象用于对LogRecord对象执行过滤,logger和handler都可以使用filter来过滤record。下面用一个列子来说明Filter基类的作用:
    如果使用A.B实例化一个filter,那么它允许名称为A.B,A.B.C,A.B.C.D这样的logger记录的日志通过,不允许名称为A.BB,B.A.B这样的logger记录的日志通过。
    如果使用空字符串实例化一个filter,那么它允许所有的事件通过。
    Filter基类有一个方法叫filter(record),它用来决定指定的record(LogRecord对象)是否被记录。如果该方法返回0,则不记录record;返回非0则记录record。

  4. formatter:制定日志输出的具体格式,formatter的构造方法需要两两个参数,消息格字符串和日期字符串。
    Formatter对象用于把一个LogRecord对象转换成文本,它定义了日志的格式、结构。与logging.Handler类不同,应用程序可以直接实例化Formatter类,如果需要也可以子类化Formatter,以便定制一些行为。
    Formatter的构造函数接受两个参数:第一个参数是用于日志信息的格式化字符串;第二个参数是用于日期的格式化字符串。第二个参数可选的,默认值是%Y-%m-%d %H:%M:%S。
    日志信息的格式化字符串用%()s风格的字符串做替换。
    下面是替换字符串和它们所代表的含义:
    %(name)s
    logger的名称
    %(levelno)s
    日志级别的数字表现形式
    %(levelname)s
    日志级别的文本表现形式
    %(pathname)s
    调用logging的源文件的全路径名
    %(filename)s
    pathname的文件名部分
    %(module)s
    模块名(filename的名称部分)
    %(lineno)d
    调用logging的行号
    %(funcName)s
    函数名
    %(created)f
    LogRecord的创建时间(time.time()的返回值)
    %(asctime)s
    LogRecord的创建时间的文本表现形式
    %(msecs)d
    创建时间的毫秒部分
    %(relativeCreated)d
    LogRecord的创建时间,单位是毫秒。这个时间是相对logging模块被加载的时间的(通常就是应用程序启动的时间)。
    %(thread)d
    线程ID
    %(threadName)s
    线程名称
    %(process)d
    进程ID
    %(message)s
    record.getMessage()的返回结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值