pytest_api/tools/log_control.py

87 lines
3.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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")