学习 python logging(4): 标准库中的Handlers

在 python 的标准库中,有了很多已经定义好的 Handler , 这些 Handler 能覆盖我们在使用中的大部分情况, 包括将日志记录到文件中、将日志上传指定服务器等等,接下来就过一过这些 Handler 的基本信息。

1. StreamHandler

将日志消息发送到一个 File like的流对象实例中。 一个 StreamHandler 的实例中,初始化时会持有一个 stream 参数,

初始化参数:

  • stream {object} : File like object, 如果有被赋值,则为我们自己赋值的流对象,如果为 None ,则是 sys.stderr

2. FileHandler

将日志记录到磁盘文件中.

初始化参数:

  • filename {str}: 日志文件名。
  • mode {str}: 打开日志文件的模式,默认为 a ,
  • encoding {str}: 打开日志文件的编码格式.
  • delay {bool}: 是否延时打开文件 Stream, 默认 False 。为 True 时,当使用的时候才会打开文件流,否则,初始化时就会打开。

3. BaseRotatingHandler(FileHandler)

在项目中,为了避免日志文件过大,需要切割日志文件,BaseRotatingHandler 就是切割日志文件处理类的基类。需使用继承自这个类的子类的实例, 不能直接使用。

需要子类实现 shouldRolloverdoRollover

4. RotatingFileHandler (BaseRotatingHandler)

最简单继承了 BaseRotatingHandler,新增的初始化参数

  • maxBytes: 每个日志文件的最大 Byte 数。 文件大小达到了最大之后,就会把文件重命名,包括已经命名为 .1.2 的文件,然后使用新的文件。
  • backupCount: 日志文件的最大备份数目, 当数量大于1时,备份文件的是以 .1, .2 …为文件扩展类型,例如 test.log.5

5. TimedRotatingFileHandler(BaseRotatingHandler)

基于时间的文件日志处理类,可以根据时间点和时间间隔来切分日志,如每天的0点,每两个小时。有其固定定义的几种类型。

初始化参数:

  • when {str}: 默认为 h, 不区分大小写。有一下可选

    * S - 基于秒
    * M - 分钟
    * H - 小时
    * D - 天
    * midnight - roll over at midnight
    * W{0-6} - 在某一天进行切分; 0 是周一
    
  • interval {int}: 多少个 when 进行日志切分。

    when='D', interval=2: 表示 没两天进行切分,日志备份。

  • backupCount {int}: 多少个备份数.

  • utc {bool}: 是否使用 当地时间,默认是 False, 不使用.

  • atTime {object}: 当 whenmidnightW{0-6} 时使用,默认为None, None时, 指的是午夜, 如果不是,就是指定的时间点。

6. SocketHandler(Handler)

基于 TCP 的日志处理类,会将 LogRecord 实例中的__dict__ 信息 和 堆栈信息 以 pickle 的方式序列化之后传输到 socket 服务端。
初始化参数: host, port

7. DatagramHandler(SocketHandler)

基于 UDP 的日志处理类, 继承自 SocketHandler.

8. SysLogHandler

将日志发送到 unix syslog中。可以是远程的服务器也可以是本地的. 使用场景是系统层面的排错。

初始化参数:

  • address {tuple or str}: 地址参数,一个元组, 默认是 ('localhost', SYSLOG_UDP_PORT), 也可以使用 /dev/log, 是一个 Unix domain socket, 传输速度快,用来进程间通信, 被用来发送消息到 syslog, 这个 /dev/log 其实一个 socket 文件。
  • facility {int}: 消息类型,并且对应到优先级。默认为LOG_USER, 需要使用此类中定义好的变量。
  • socktype: socket 类型, 如果为空,使用 socket.SOCK_DGRAM

9. NTEventLogHandler

window上,不做描述。

10.SMTPHandler

将日志文件用邮件方式发出.

初始化参数:

  • mailhost {tuple(host, port)}: 邮箱地址
  • fromaddr: 发送人
  • toaddrs: 邮件接收人
  • subject: 邮件主题
  • credentials: 邮箱用户信息,( username, password)
  • secure:
  • timeout: 发送邮箱超时时间

11. MemoryHandler

将日志记录在内存中,当达到一定的量之后,统一发送到处理类中,处理类需要实现 handle(LogRecord) 方法

初始化参数:

  • capacity{int}: 缓存的数量
  • flushLevel: 推送日志到目标的日志等级,默认为logging.ERROR
  • target:日志最终处理类, 需要实现 handle(LogRecord) 方法
  • flushOnClose {bool}: 是否需要在关闭时将日志推送处理,默认为True

12. HTTPHandler

将日志用 HTTP 的方式,发送给处理服务端。

13. QueueHandler

将日志信息放到一个 Queue 里面去,方便集中管理。


在以上的所有 Handler 中, 经常碰到的有:StreamHandler, FileHandler, RotatingFileHandler, TimedRotatingFileHandler。如果没有特殊的要求, TimedRotatingFileHandler 应该是最常用的处理类。

参考:

  1. https://docs.python.org/3/howto/logging.html#logging-basic-tutorial
  2. https://docs.python.org/3/library/logging.html
  3. https://docs.python.org/3/howto/logging-cookbook.html#logging-cookbook
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值