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