日志的等级
日志等级可以分为5个,从低到高分别是:
1. DEBUG | 程序调试bug时使用 |
2. INFO | 程序正常运行时使用 |
3. WARNING | 程序未按预期运行时使用,但并不是错误,如:用户登录密码错误 |
4. ERROR | 程序出错误时使用,如:IO操作失败 |
5. CRITICAL | 特别严重的问题,导致程序不能再继续运行时使用,如:磁盘空间为空 |
- 以下的方式只能打印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信息
-
日志收集器有相应的等级管理,在打印日志时,高于日志登记是不会被记录和打印收集的,默认是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、创建一个文件处理器
2、设置文件处理器的级别
3、在loger中添加文件处理器
这样就能生成一个loger.log的文件
file_handler=logging.FileHandler("loger.log",encoding="utf-8")
file_handler.setLevel("INFO")
loger.addHandler(file_handler)
- 日志的格式设置
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")