logging学习
一、日志级别、输出渠道、日志内容
1、日志级别(Level):DEBUG、INFO、WARNING、ERROR、CRITICAL(FATAL)
- 如果日志要求是DEBUG级别,那么以上五个级别的日志都输出,如果日志是INFO级别,那么会输出INFO以上级别,以此类推,一般设置是INFO级别
2、输出渠道(Handle):控制台(StreamHandle)、文件(FileHandle)
3、日志内容(Format):时间-哪个文件-哪行代码-输出内容
二、logging模块使用
1、import logging
2、默认的root日志收集器。默认的输出级别:WARNING
3、定制化自己的日志输出
3.1、第一步:创建一个日志收集器:
logger = logging.getLogger("收集器的名字")
3.2、第二步:给日志收集器设置日志级别:
logger.setLevel(logging.INFO)
3.3、第三步:给日志收集器,创建一个输出渠道。
handle1 = logging.StreamHandler()
3.4、第四步:给渠道设置一个日志输出内容的格式。
3.5、第五步:将设置的格式,绑定到渠道当中。将格式与渠道关联起来。
3.6、第六步:将设置好的渠道,添加到日志收集器上。
import logging
# 创建一个日志收集器
logger = logging.getLogger("nmb-py30")
# 设置日志输出级别
logger.setLevel(logging.INFO)
# 设置日志输出在哪些渠道
handle1 = logging.StreamHandler()
# 设置渠道自己的输出级别。
handle1.setLevel(logging.ERROR)
# 设置渠道的输出内容格式
fmt = '%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d line:%(message)s'
formatter = logging.Formatter(fmt)
# 将日志格式绑定到渠道当中。
handle1.setFormatter(formatter)
# 将设置好的渠道,添加到日志收集器上。
logger.addHandler(handle1)
# 设置日志输出到文件
handle2 = logging.FileHandler("my_py30.log",encoding="utf-8")
handle2.setFormatter(formatter)
logger.addHandler(handle2)
logger.info("hello,py30,我的第一个收集器设置成功了吗??")
logger.error("ERRor1111!!!!!")
注意:一个日志收集器可以添加多个渠道,且每个渠道还可以设置级别,但是只能在创建的收集器范围内;例如收集器设置的是INFO,那么渠道最低也只能是INFO,不能是DEBUG。
三、logging封装
import logging
class MyLogger(logging.Logger):
def __init__(self,name,level=logging.INFO,file=None):
# 设置输出级别、输出渠道、输出日志格式
super().__init__(name,level)
# 日志格式
fmt = '%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d line:%(message)s'
formatter = logging.Formatter(fmt)
# 控制台渠道
handle1 = logging.StreamHandler()
handle1.setFormatter(formatter)
self.addHandler(handle1)
if file:
# 文件渠道
handle2 = logging.FileHandler(file,encoding="utf-8")
handle2.setFormatter(formatter)
self.addHandler(handle2)
# 因为一个项目的日志都是写入到一个日志文件的,所以可以把name,file这两个参数写死,直接实例化
# 后期每个模块调用就不用实例化,导入可以直接使用
logger = MyLogging("mylog",file="my_log.log")
if __name__ == '__main__':
mlogger = MyLogger("py30",file="my_logger.log")
mlogger.info("测试,我自己封装的日志类!!!!")