Python自动化- 20210606 - 自动化5(logging日志处理)

日志的等级

日志等级可以分为5个,从低到高分别是:

1. DEBUG程序调试bug时使用
2. INFO程序正常运行时使用
3. WARNING程序未按预期运行时使用,但并不是错误,如:用户登录密码错误
4. ERROR程序出错误时使用,如:IO操作失败
5. CRITICAL特别严重的问题,导致程序不能再继续运行时使用,如:磁盘空间为空
  1. 以下的方式只能打印error或warning级别的日志
import logging

loger =logging.getLogger("name")

def login(username=None, password=None):
    if username is None or password is None:
        loger.warning("这是warn信息")
        return {"code": "400", "msg": "用户名或密码为空"}
    if username == 'haha' and password == '123':
        loger.error("这是error信息")
        loger.info("info信息")
        return {"code": "200", "msg": "登录成功"}
    return {"code": "300", "msg": "用户名或密码错误"}

login()
# 输出:这是warn信息
login("haha","123")
# 输出:这是error信息
  1. 日志收集器有相应的等级管理,在打印日志时,高于日志登记是不会被记录和打印收集的,默认是warring等级,并且设置级别时需要注意是 大写

    从上面是看到当符合条件时,info信息没有打印,那么如何打印info信息呢?
    1、创建一个流处理器
    2、设置流处理器的登记
    3、在loger中增加流处理

    	注意⚠️:流处理的等级和loger的日志登记,以哪边比较高为主。如:
    	
    	场景一:
    		loger.setLevel("INFO")
    		haedler.setLevel("DEBUG")	
    		那么流处理器的debug等级的日志是不会输出的,因为loger就不会去收集
    		 			
    	场景二:
    		loger.setLevel("DEBUG")
    		haedler.setLevel("INFO")	
    		那么流处理器并不会把debug的日志打印在终端上,
    		
    		由以上列子可以说说明,以日志等级更高的控制为准
    

# 获取一个日志收集器
import logging

loger =logging.getLogger("name")
loger.setLevel("DEBUG")
handler =logging.StreamHandler() # 导入流处理器
handler.setLevel("INFO") # 设置流处理器的日志等级
loger.addHandler(handler) # 往日志种添加handle

def login(username=None, password=None):
    if username is None or password is None:
        loger.warning("这是warn信息")
        return {"code": "400", "msg": "用户名或密码为空"}
    if username == 'haha' and password == '123':
        loger.error("这是error信息")
        loger.info("info信息")
        loger.debug("debug信息")
        return {"code": "200", "msg": "登录成功"}
    return {"code": "300", "msg": "用户名或密码错误"}

login("haha",'123')
#输出:这是error信息
#输出:info信息
  1. 那可以在终端显示之后,如果记录在文本中呢
    1、创建一个文件处理器
    2、设置文件处理器的级别
    3、在loger中添加文件处理器

这样就能生成一个loger.log的文件

file_handler=logging.FileHandler("loger.log",encoding="utf-8")
file_handler.setLevel("INFO")
loger.addHandler(file_handler)
  1. 日志的格式设置
    python 官网,日志格式的定义
    PYTHON中文库学习中心,可以看下
# 设置打印和文件中的格式
fm ='%(asctime)s -- %(filename)s -- %(funcName)s -- %(levelname)s -- %(levelno)s -- %(lineno)d -- %(message)s'
fml=logging.Formatter(fm)
file_handler.setFormatter(fml)
handler.setFormatter(fml)

# 2021-06-06 15:01:03,176 -- log_util.py -- login -- ERROR -- 40 -- 26 -- 这是error信息
# 2021-06-06 15:01:03,176 -- log_util.py -- login -- INFO -- 20 -- 27 -- info信息

log的封装

import logging
import time


class loghandler(object):
    def __init__(self,logger = None):
        self.loger = logging.getLogger(logger)
        self.loger.setLevel(logging.DEBUG)
        self.logLevel = logging.DEBUG
        self.framt ='%(asctime)s -- %(filename)s -- %(funcName)s -- %(levelname)s -- %(levelno)s -- %(lineno)d -- %(message)s'

        self.handler = logging.StreamHandler()  # 导入流处理器
        self.handler.setLevel(self.logLevel)
        self.loger.addHandler(self.handler)


        self.log_time = time.strftime("%Y_%m_%d_")
        self.file_handler = logging.FileHandler(r"../log/"+self.log_time+"test.log", encoding="utf-8")
        print(r"../log"+self.log_time+"test.log")
        self.file_handler.setLevel(self.logLevel)
        self.loger.addHandler(self.file_handler)
        fml = logging.Formatter(self.framt)
        self.file_handler.setFormatter(fml)
        self.handler.setFormatter(fml)
    def ceart_loghandler(self):
        return self.loger

log=loghandler().ceart_loghandler()
log.error("error")

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值