Python必备秘籍

python之logging日志模块

2019-01-12  本文已影响2人  TestingShare

记录器是程序不可或缺的部分,没有了记录器是很难在程序中发现问题所在的,只能一个模块一个模块的去排查
有了记录器就会很快定位到位置所在,这样就可以方便的找到错误,为排查问题降低成本
一个记录器标准模块,根据级别返回有效信息

Level等级 数值  
CRITICAL   50
ERROR      40
WARNING    30
INFO       20
DEBUG      10
NOTSET      0

NOTSET<DEBUG<INFO<WARNING<ERROR<CRITICAL 可以这么理解,包含的关系,一层一层的概括进去

log的配置可以分开来配置

import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO) #设置输出等级
ph = logging.StreamHandler()  #创建输出控制台的容器
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s") #配置输出的内容
ph.setFormatter(formatter)   #将配置内容添加到创建的容器里
logger.addHandler(ph)   #将我们的容器添加到handler
logger.info("控制台输出内容")
image.png

Formatter是设置输出的展示内容,可以传多参数

image.png

既然在控制台输出了,还要输出到文件中,保存起来
在创建个FileHandler,添加到Handler容器中就可以实现了

logger = logging.getLogger() # 初始化logger
logger.setLevel(logging.INFO) #设置log级别
fileTimeName = time.strftime("%Y-%m-%d",time.localtime()) # 输出日期,设置log文件名字
genpath = os.path.abspath("..") #获取到根目录
logpath = os.path.join(genpath,"log") #拼接log文件路径
logFileName = logpath+"/"+fileTimeName+".log"
fh = logging.FileHandler(logFileName,mode="w",encoding="utf-8") #既然是写入文件,就需要传个文件路径和名字,mode是写入方式,encoding编码格式
if os.path.exists(logpath): #判断路径是否存在,不存在则创建
    pass
else:
    os.makedirs(logpath)
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] %(name)s - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
logger.addHandler(fh)

总结

1、log常用两种方式
     控制台输出
     写入本地文件中
2、控制台输出,使用StreamHandler()
     写入文件,使用FileHandler(path,mode="w",encoding="utf-8")
     其他部分都是通用的,初始化,设置输出等级,设置输出样式,添加到handler里

上一篇下一篇

猜你喜欢

热点阅读