烂笔头:知识回顾 - 日志

日志类相关

解决问题:

  • 直接写入的日志不利于错误排错
  • 文件过大,不利于统计,记录混乱不清楚
  • 文件过大,无法自动轮转保存

使用

logging模块,默认有一个root收集器,收集warning级别及以上的日志

# 创建日志收集器对象
loger = logging.getLogger()
# 定义日志收集器等级
loger.setLevel("level_str")
# 定义输出到终端控制台    
out_where = logging.StreamHandler()
# 定义日志输出等级
out_where.setLevel('level_str')
# 定义日志显示格式
out_format = logging.Formatter("%(asctime)s - [%(levelname)s] -[日志信息]: %(message)s")
out_where.setFormatter(out_format)
# 将日志收集器对象与输出对接
loger.addHandler(out_where)

封装


class MyLog:
    """
    我的日志类
    """

    def __init__(self):
    
    # 定义名为case的日志收集器对象
        self.loger = logging.getLogger(do_config("log", "name"))
    # 定义日志收集器等级
        self.loger.setLevel(do_config("log", "content_level"))
        # 加个判断避免一条用例写两次
        if not self.loger.handlers:
        # 定义输出到终端
            consle_handle = logging.StreamHandler()
            file_handle = ConcurrentRotatingFileHandler(filename=os.path.join(LOGS_PATH, do_config("log", "log_name")),
            mode="a", maxBytes=do_config("log","Maxbytes"),
            backupCount=do_config("log", "count"),
                encoding='utf-8')
                
        # 定义日志输出出道等级
            consle_handle.setLevel(do_config("log", "content_level"))
        #     consle_handle.setLevel("ERROR")
            file_handle.setLevel(do_config("log", "content_level"))
        # 定义日志显示格式
            consle_format = logging.Formatter(do_config("log", "simple"))
            file_format = logging.Formatter(do_config("log", "clear"))

            consle_handle.setFormatter(consle_format)
            file_handle.setFormatter(file_format)
            self.loger.addHandler(consle_handle)
            self.loger.addHandler(file_handle)

    def out(self):
        return self.loger
				

封装中在日志输出时进行loger收集器对象是否存在判断,避免一条日志重复输出记录多次,为使日志文件能够达到一定大小自动进行轮换保存使用第三方模块concurrent_log_handler 中的ConcurrentRotatingFileHandler类。

日志等级
NOTSET < debug < info< warning< error< critical

日志级别(level)描述
DEBUG调试级别,一般用于问题的排查,日志的信息最为详细
INFO仅记录普通的信息,日志信息的详细程度仅次于DEBUG
WARNING警告信息,一般这类信息不会影响程序的正常运行
ERROR错误信息, 出现错误信息时,程序一般已不能正常运行
CRITICAL更严重的错误信息,程序不能继续运行

format参数中可能用到的格式化串:

参数注释
%(name)sLogger的名字
%(levelno)s数字形式的日志级别
%(levelname)s文本形式的日志级别
%(pathname)s调用日志输出函数的模块的完整路径名,可能没有
%(filename)s调用日志输出函数的模块的文件名
%(module)s调用日志输出函数的模块名
%(funcName)s调用日志输出函数的函数名
%(lineno)d调用日志输出函数的语句所在的代码行
%(created)f当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s字符串形式的当前时间。默认格式是 “2019-10-11 00:00:00,896”。逗号后面的是毫秒
%(thread)d线程ID。可能没有
%(threadName)s线程名。可能没有
%(process)d进程ID。可能没有
%(message)s用户输出的消息

本文由博客一文多发平台 OpenWrite 发布!原创于微信公众号:下钻上长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值