python日志模块处理,轮转以及封装

目录

python日志模块处理以及封装

一、日志的五个等级【从低到高】

二、最简单的日志输出

三、日志输出格式:fm = logging.Formatter(formater)

四、日志收集器

1.创建日志收集器对象

2.设置日志收集器收集的等级(没有设置之前,默认是warning等级)

3.日志输出渠道的等级并添加到收集器中(没有设置之前,默认是warning)

4.输出到文件

5.日志输出格式的设置 与输出【控制台&指定文件】

6.整体示例

五、日志轮转

1.按文件大小轮转:logging.handlers.RotatingFileHandle

2.按时间轮转:logging.handlers.TimedRotatingFileHandler

3.使用logging第三方模块

4.实例

六、python日志类的封装

七、总结

1.引用日志函数:import logging

2.创建日志收集器:getLogger

3.设置日志等级:setLevel

5.日志添加到收集器:addHandler

4.设置日志输出渠道:常用的为前四个

5.设置日志输出格式:Formatter

6.输出日志渠道和格式绑定:setFormatter

7.个人理解对该模块:有点像垃圾的回收


python日志模块处理以及封装

一、日志的五个等级【从低到高】

级别

说明

DEBUG

输出详细的运行情况,主要用于调试

INFO

确认一切按预期运行,一般用于输出重要运行情况

WARNING

一些意想不到的事情发生了(比如:警告,内存空间不足),但是这个软件还能按预期工作,再不久的将来会出现问题

ERROR

发生了错误软件没能执行一些功能,还可以继续执行

CRITICAL

一个严重的错误,表明程序本身可能无法继续运行

注意:这5个等级,也分包对应5种打日志的方法:debug,info,error,critical。默认是WARNING,当在WARNING或之上时才被追踪

 

二、最简单的日志输出

import logging

logging.debug("这个是debug等级的日志")

logging.info("这个是info等级的日志")

logging.warning("这个是warning等级的日志")

logging.error("这个是error等级的日志")

logging.critical("这个是critical等级的日志")

 

三、日志输出格式:fm = logging.Formatter(formater)

formater = '%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:%(message)s'

日志相关参数

 

四、日志收集器

1.创建日志收集器对象

mylog=logging.getLogger("liu")

2.设置日志收集器收集的等级(没有设置之前,默认是warning等级)

mylog.setLevel("DEBUG")

3.日志输出渠道的等级并添加到收集器中(没有设置之前,默认是warning)

# 第三步:日志输出渠道的等级(没有设置之前,默认是warning等级)
# 1.输出至控制台的渠道
# 创建输出渠道
sh = logging.StreamHandler()
# 设置输出渠道的等级
sh.setLevel("DEBUG")
# 将输出渠道添加到收集器中
mylog.addHandler(sh)

4.输出到文件

# 创建输出渠道(输出到文件)
fh = logging.FileHandler("log.log", encoding="utf8")
fh.setLevel("ERROR")
mylog.addHandler(fh)

5.日志输出格式的设置 与输出【控制台&指定文件】

# 第四步:日志输出格式的设置
# formater="%(asctime)s-%(filename)s-%(levelno)s-%(lineno)s, %(message)s"
formater = '%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:%(message)s'
# 创建一个输出格式
fm = logging.Formatter(formater)
# 将输出格式和输出渠道绑定
sh.setFormatter(fm)  # 输出格式和输出渠道绑定:控制台
fh.setFormatter(fm)  # 将输出格式和输出渠道绑定:文件


6.整体示例

设置logging,创建一个FileHandler,并对输出消息的格式进行设置,将其添加到logger,然后将日志写入到指定的文件中,并输出至控制台【ps:将控制台和日志文件,都理解为一个接收装置】

【ps:个人理解创建日志过程:先有一个容器对日志进行接收,接收哪些垃圾需要去回收,之后再思考要接收哪些地方的数据,需要放置在收集器中(地方要接收哪些垃圾,需要过滤,以及格式的设置),将地方收集到的其放置在容器中(容器会根据容器的过滤条件,去过滤地方的垃圾)】

import logging

# 第一步:创建一个日志收集器对象
mylog = logging.getLogger("liuhao")

# 第二步:设置日志收集器收集的等级(没有设置之前,默认是warning等级)
mylog.setLevel("DEBUG")

# 第三步:日志输出渠道的等级(没有设置之前,默认是warning等级)
# 1.输出至控制台的渠道
# 创建输出渠道
sh = logging.StreamHandler()
# 设置输出渠道的等级
sh.setLevel("DEBUG")
# 将输出渠道添加到收集器中
mylog.addHandler(sh)

# 第三步:2.输出到文件
# 创建输出渠道(输出到文件)
fh = logging.FileHandler("log.log", encoding="utf8")
fh.setLevel("ERROR")
mylog.addHandler(fh)

# 第四步:日志输出格式的设置
# formater="%(asctime)s-%(filename)s-%(levelno)s-%(lineno)s, %(message)s"
formater = '%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:%(message)s'
# 创建一个输出格式
fm = logging.Formatter(formater)
# 将输出格式和输出渠道绑定
sh.setFormatter(fm)  # 输出格式和输出渠道绑定:控制台
fh.setFormatter(fm)  # 将输出格式和输出渠道绑定:文件

输出

 

五、日志轮转

1.按文件大小轮转:logging.handlers.RotatingFileHandle

2.按时间轮转:logging.handlers.TimedRotatingFileHandler

3.使用logging第三方模块

    3.1.RotatingFileHandler(按照文件大小分割)

       hdlr = logging.handlers.RotatingFileHandler(LOG_FILE,maxBytes=1024*1024,backupCount=40)

    3.2.TimedRotatingFileHandler(按照时间间隔分割)

       hdlr = logging.handlers.TimedRotatingFileHandler(LOG_FILE,when='M',interval=1,backupCount=40)

   参数解释:

    interval   是指等待多少个单位when的时间后,Logger会自动重建文件,当然,这个文件的创建取决于filename+suffix,若这个文件跟之前的文件有重名,则会自动覆盖掉以前的文件,所以有些情况suffix要定义的不能因为when而重复.

   backupCount  是保留日志个数.默认的0是不会自动删除掉日志,若设10,则在文件的创建过程中库会判断是否有超过这个10,若超过,则会从最先创建的开始删除

   when:是一个字符串,用于描述滚动周期的基本单位,字符串的值及意义如下
      “S”: Seconds
      “M”: Minutes
      “H”: Hours
      “D”: Days
      “W”: Week day (0=Monday)
      “midnight”: Roll over at midnight

   interval: 滚动周期,单位有when指定,比如:when=’D’,interval=1,表示每天产生一个日志文件

4.实例

import logging
from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler

# 第一步:创建一个日志收集器对象
mylog = logging.getLogger("liuhao")

# 第二步:设置日志收集器收集的等级(没有设置之前,默认是warning等级)
mylog.setLevel("DEBUG")

# 第三步:日志输出渠道的等级(没有设置之前,默认是warning等级)
"""
# 创建一个根据文件大小进行轮转的输出渠道
fh = RotatingFileHandler(filename="mylog.log",
                         encoding="utf8",
                         maxBytes=1024,
                         backupCount=3)
"""

#创建一个根据时间进行轮转的收集器
fh=TimedRotatingFileHandler(filename="my.log",encoding="utf8",when="S",interval=1,backupCount=7)


# 设置输出等级
fh.setLevel("DEBUG")
# 添加到收集器中
mylog.addHandler(fh)

# 第四步:日志输出格式的设置
# formater="%(asctime)s-%(filename)s-%(levelno)s-%(lineno)s, %(message)s"
formater = '%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:%(message)s'
# 创建一个输出格式
fm = logging.Formatter(formater)
# 将输出格式和输出渠道绑定
fh.setFormatter(fm)  # 将输出格式和输出渠道绑定:文件

mylog.debug("这个是debug等级的日志")

mylog.info("这个是info等级的日志")

mylog.warning("这个是warning等级的日志")

mylog.error("这个是error等级的日志")

mylog.critical("这个是critical等级的日志")

 

六、python日志类的封装

import logging

class HandleLog(object):
    
    @staticmethod
    def creat_logger():
        # 创建收集器,设置收集器的等级
        mylog = logging.getLogger("liuhao")
        mylog.setLevel("DEBUG")
    
        # 创建输出到控制台的渠道,设置等级
        sh = logging.StreamHandler()
        sh.setLevel("DEBUG")
        mylog.addHandler(sh)
    
        # 创建输出到文件的渠道
        fh = logging.FileHandler("log.log", encoding="utf8")
        fh.setLevel("ERROR")
        mylog.addHandler(fh)
    
        # 设置日志输出格式
        formater = '%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:%(message)s'
        fm = logging.Formatter(formater)
        sh.setFormatter(fm)  # 输出格式和输出渠道绑定:控制台
        fh.setFormatter(fm)  # 将输出格式和输出渠道绑定:文件
        
        return mylog

log=HandleLog.creat_logger()
log.info("python888")

 

七、总结

1.引用日志函数:import logging

2.创建日志收集器:getLogger

3.设置日志等级:setLevel

5.日志添加到收集器:addHandler

4.设置日志输出渠道:常用的为前四个

5.设置日志输出格式:Formatter

6.输出日志渠道和格式绑定:setFormatter

7.个人理解对该模块:有点像垃圾的回收

【ps:个人理解创建日志过程:先有一个容器对日志进行接收(垃圾总长),接收哪些垃圾需要去回收,之后再思考要接收哪些地方的数据,需要放置在收集器中(地方要接收哪些垃圾,需要过滤,以及格式的设置),将地方收集到的其放置在容器中(容器会根据容器的过滤条件,去过滤地方的垃圾)】

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值