日志类相关
解决问题:
- 直接写入的日志不利于错误排错
- 文件过大,不利于统计,记录混乱不清楚
- 文件过大,无法自动轮转保存
使用
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)s | Logger的名字 |
%(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 发布!原创于微信公众号:下钻上长