pytest_api/tools/log_control.py

87 lines
3.1 KiB
Python
Raw Permalink Normal View History

2023-02-02 11:07:43 +08:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
from logging import handlers
import colorlog
from config.settings import ConfigHandler
class LogHandler(object):
# 日志级别关系映射
level_relations = {
'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'crit': logging.CRITICAL
}
def __init__(self, filename, level='info', when='D', back_count=3, fmt='%(levelname)-8s%(asctime)s%(name)s:%(''filename)s:%(lineno)d %(message)s'):
# 初始化获取logger对象日志格式里面的%(name)s 就是filename
self.logger = logging.getLogger(filename)
# 定义不同日志等级颜色
self.log_colors_config = {
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red',
}
'''
colorlog.ColoredFormatter是一个Python logging模块的格式化用于在终端输出日志的颜色
日志内容格式输出在屏幕
asctime日志时间
name日志收集器的名字
levelname文本形式的日志级别
message 用户输出的消息
'''
formatter = colorlog.ColoredFormatter('%(log_color)s[%(asctime)s] [%(name)s] [%(levelname)s]: %(message)s',log_colors=self.log_colors_config)
# 往屏幕上输出,设置屏幕上显示的格式
sh = logging.StreamHandler()
sh.setFormatter(formatter)
self.logger.addHandler(sh)
# 设置文件日志格式和日志级别
format_str = logging.Formatter(fmt)
self.logger.setLevel(self.level_relations.get(level))
# 往文件里写入#指定间隔时间自动生成文件的处理器
th = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=back_count, encoding='utf-8')
"""
#实例化TimedRotatingFileHandler
#interval是时间间隔backupCount是备份文件的个数如果超过这个个数就会自动删除when是间隔的时间单位单位有以下几种
# S 秒
# M 分
# H 小时、
# D 天、
# W 每星期interval==0时代表星期一
# midnight 每天凌晨
"""
# 设置文件里写入的格式
th.setFormatter(format_str)
# 把对象加到logger里
self.logger.addHandler(th)
self.log_path = ConfigHandler.log_path
INFO = LogHandler(ConfigHandler.info_log_path, level='info')
ERROR = LogHandler(ConfigHandler.error_log_path, level='error')
WARNING = LogHandler(ConfigHandler.warning_log_path, level='warning')
if __name__ == '__main__':
INFO.logger.info("测试")
msg = '111'
log = LogHandler("../logs/info.log", level='debug')
log.logger.debug('debug')
log.logger.info(msg)
log.logger.warning('警告')
log.logger.error('报错')
log.logger.critical('严重')
LogHandler('../logs/error.log', level='error').logger.error('error')
# is_open = ReadIni(node='log').get_value("run")
INFO.logger.info("111")