logging模块学习

1,写在前面的话

之前读代码的时候接触到这个模块,但是但是没有好好研究这个模块,后来发现这个模块还是很好用的,有必要系统学习一下
先参考这个博客学习一下

介绍

Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式。

   其实有点读不懂啦,没关系,继续往后看

logging模块与log4j的机制是一样的,只是具体的实现细节不同。模块提供logger,handler,filter,formatter。

    log4j是啥?还是有点读不懂,继续往后看

logger:提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。

handler:将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。

filter:提供一种优雅的方式决定一个日志记录是否发送到handler。

formatter:指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。

与log4j类似,logger,handler和日志消息的调用可以有具体的日志级别(Level),只有在日志消息的级别大于logger和handler的级别。

 完全晕了,太抽象了,继续往下看吧

日志级别

import logging

居然本身就有这个模块,不需要安装

1,参考
日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以自己定义日志级别
日志等级说明:

	DEBUG:程序调试bug时使用
	INFO:程序正常运行时使用
	WARNING:程序未按预期运行时使用,但并不是错误,如:用户登录密码错误
	ERROR:程序出错误时使用,如:IO操作失败
	CRITICAL:特别严重的问题,导致程序不能再继续运行时使用,如:磁盘空间为空,一般很少使 用
	默认的是WARNING等级,当在WARNING或WARNING之上等级的才记录日志信息。

RotatingFileHandler

日志回滚的意思为:比如日志文件是chat.log,当chat.log达到指定的大小之后,RotatingFileHandler自动把文件改名为chat.log.1。不过,如果chat.log.1已经存在,会先把chat.log.1重命名为chat.log.2。最后重新创建 chat.log,继续输出日志信息。【这样保证了chat.log里面是最新的日志】
参考这里

1,实例化一个logger

# 基本配置
logging.basicConfig()
# 实例化一个logger
logger = logging.getLogger("my_logger")

这步操作相当于实例化了一个logger对象
getLogger()方法后面最好加上所要日志记录的模块名字,后面的日志格式中的%(name)s 对应的是这里的模块名字,也可以不填。通常logger的名字我们对应模块名,如聊天模块、数据库模块、验证模块等

logger对象的方法有:

2,设置logger的等级

logger.setLevel(logging.INFO)

3,实例化一个handler(写入器)

# 写入文件,如果文件超过100个Bytes,仅保留5个文件。
handler = logging.handlers.RotatingFileHandler('my_logger.log', maxBytes=100, backupCount=5)
# notice that 这里的'my_logger.log'对应的是实例化logger时的给的文件名称,看到博别人的博客上面加了   log/   但是我试了之后发现行不通,去掉之后可以
# 发现实例化写入器之后才会在当前文件夹下出现'my_logger.log'文件,

在这里插入图片描述
原因的话应该会有更合理的解释但是现在还不知道

4, 把实例化的handler加入到之前实例化好的logger中

logger.addHandler(handler)

5,测试代码

i=0
while True:
    time.sleep(0.01)
    logger.info("file test")
    logger.info(i)
    i += 1

完整代码和运行结果

import time
import logging
import logging.handlers
# basic confif
logging.basicConfig()
# initialize a logger
logger = logging.getLogger('my_logger')
# set level
logger.setLevel(logging.INFO)
# initialize a handler
handler = logging.handlers.RotatingFileHandler('my_logger.log', maxBytes=100, backupCount=5)
logger.addHandler(handler)
i=0
while True:
    time.sleep(0.01)
    logger.info("file test")
    logger.info(i)
    i += 1

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值