logging
1、调用logger = logging.getLogger(日志名字)来生成一个日志收集器对象
2、设置你的日志收集级别。logger.setLevel(日志级别),一般为INFO
3、使用logging.Formatter类来定制要输出到控制台/文件当中的日志格式
4、使用handle1 = logging.StreamHandle()来创建一个控制台渠道对象,
并将控制台要输出的日志格式设置为3当中的formatter.
设置:handle1.setformatter(Formatter对象)
5、将4当中的handle1添加到logger当中,那么日志就可以输出到控制台。
6、使用handle2 = logging.FileHandle(日志文件路径)来创建一个控制台渠道对象,
并将控制台要输出的日志格式设置为3当中的formatter.
设置:handle2.setformatter(Formatter对象)
7、将6当中的handle2添加到logger当中,那么日志就可以输出到文件当中。
6、使用handle3 = logging.FileHandle(日志文件路径)来创建一个控制台渠道对象,
并将控制台要输出的日志格式设置为3当中的formatter.
设置:handle3.setformatter(Formatter对象)
指定handle3的日志级别为ERROR
handle3.setLevel(logging.ERROR)
7、将6当中的handle3添加到logger当中,那么日志就可以输出到文件当中。
代码如下:
例子:1
import logging
# 第一步:
# 创建一个日志收集器
logger = logging.getLogger("nmb-py37")
# 第二步:
# 设自定义要收集的日志级别、自定义日志格式、自定义输出渠道
# 设自定义要收集的日志级别
logger.setLevel(logging.INFO)
# 自定义日志格式(Formatter)
fmt_str = "%(asctime)s %(name)s %(levelname)s %(filename)s [%(lineno)d] %(message)s"
# 实例化一个日志格式类
formatter = logging.Formatter(fmt_str)
# 实例化渠道(Handle).
# 控制台(StreamHandle)
handle1 = logging.StreamHandler()
# 设置渠道当中的日志显示格式
handle1.setFormatter(formatter)
# 将渠道与日志收集器绑定起来
logger.addHandler(handle1)
# 文件渠道(FileHandle)
handle2 = logging.FileHandler("py37.log",encoding="utf-8")
# 设置渠道当中的日志显示格式
handle2.setFormatter(formatter)
# 将渠道与日志收集器绑定起来
logger.addHandler(handle2)
# 文件渠道(FileHandle)
handle3 = logging.FileHandler("py37-error.log",encoding="utf-8")
# 设置渠道当中的日志显示格式
handle3.setFormatter(formatter)
# 设置handle3的日志输出级别为ERROR
handle3.setLevel(logging.ERROR)
# 将渠道与日志收集器绑定起来
logger.addHandler(handle3)
logger.info("hello,logging!!")
logger.warning("hello,warning!!")
logger.error("你错了!!")
例子2:
import logging
# 第一步:
# 创建一个日志收集器
get_log = logging.getLogger("pretty")
# 第二步:
# 设自定义要收集的日志级别、自定义日志格式、自定义输出渠道
get_log.setLevel(logging.INFO)
# 自定义日志格式(Formatter)
fmt_01 = "%(asctime)s %(name)s %(levelname)s %(filename)s [%(lineno)d] %(message)s"
# 实例化一个日志格式类
get_format = logging.Formatter(fmt_01)
"""
实例化渠道(Handle)。
控制台(StreamHandle)
"""
handle_01 = logging.StreamHandler()
# 设置渠道当中的日志显示格式
handle_01.setFormatter(get_format)
# 将渠道与日志收集器绑定起来
get_log.addHandler(handle_01)
# 输出到控制台 文件渠道(FileHandler)
handle_02 = logging.FileHandler("py37.log", encoding="utf-8")
handle_02.setFormatter(get_format)
# 将渠道与日志收集器绑定起来
get_log.addHandler(handle_02)
get_log.info("1111111111")
get_log.warning("22222222222222")
# 输出结果:
2021-02-05 15:38:26,499 pretty INFO longing.py [43] 1111111111
2021-02-05 15:38:26,499 pretty WARNING longing.py [44] 22222222222222
函数封装logging:
import logging
# 是所有的配置
# config = logging("config.yaml")
# log_config = config['log']
def get_logger(
name = None,
file = None,
logger_level = "DEBUG",
stream_level = "DEBUG",
file_level = "INFO",
fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s [%(lineno)d] %(message)s"
):
"""获取到收集器"""
logger = logging.getLogger(name)
# 设置收集器的级别
logger.setLevel(logger_level)
# 输出管理器
stream_handler = logging.StreamHandler()
stream_handler.setLevel(stream_level)
logger.addHandler(stream_handler)
# 格式
fmt = logging.Formatter(fmt)
stream_handler.setFormatter(fmt)
if file:
file_handler = logging.FileHandler(file, encoding='utf8')
file_handler.setLevel(file_level)
logger.addHandler(file_handler)
file_handler.setFormatter(fmt)
return logger
类封装logging:
import logging
class LoggerHandler(logging.Logger):
def __init__(self,
name = None,
file = None,
logger_level = "DEBUG",
stream_level = "DEBUG",
file_level = "INFO",
fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s [%(lineno)d] %(message)s"
):
super().__init__(name, logger_level)
# 设置收集器的级别
self.setLevel(logger_level)
# 输出管理器
stream_handler = logging.StreamHandler()
stream_handler.setLevel(stream_level)
self.addHandler(stream_handler)
# 格式
fmt = logging.Formatter(fmt)
stream_handler.setFormatter(fmt)
if file:
file_handler = logging.FileHandler(file, encoding='utf8')
file_handler.setLevel(file_level)
self.addHandler(file_handler)
file_handler.setFormatter(fmt)