logging日志封装

#coding:utf-8
import logging,time,os
#日志保存本地的路径,目录需手动创建
log_path="d:\\test\\report"

class Log:
    def __init__(self):
        #文件的命名
        self.logname=os.path.join(log_path, '%s.log'%time.strftime('%Y_%m_%d'))
        self.logger=logging.getLogger()
        self.logger.setLevel(logging.DEBUG)
        #日志输出格式,固定写法
        self.formatter=logging.Formatter('%(asctime)s - %(filename)s - %(levelname)s - %(message)s')
    
    def __console(self,level,message):
        # 创建一个 FileHandler,用于写到本地
        fh=logging.FileHandler(self.logname,'a',encoding='utf-8')
        fh.setLevel(logging.DEBUG)
        fh.setFormatter(self.formatter)
        self.logger.addHandler(fh)
        #创建一个StreamHandler,用于输出到控制台
        ch=logging.StreamHandler()
        ch.setLevel(logging.DEBUG)
        ch.setFormatter(self.formatter)
        self.logger.addHandler(ch)
        if level == 'info':
            self.logger.info(message)
        elif level == 'debug':
            self.logger.debug(message)
        elif level == 'warning':
            self.logger.warning(message)
        elif level == 'error':
            self.logger.error(message)
        # 这两行代码是为了避免日志输出重复问题
        self.logger.removeHandler(ch)
        self.logger.removeHandler(fh)    
        #关闭打开的文件
        fh.close()
    
    def debug(self,message):
        self.__console('debug', message)
        
    def info(self, message):
        self.__console('info', message)

    def warning(self, message):
        self.__console('warning', message)
        
    def error(self, message):
        self.__console('error', message)
        
if __name__ == "__main__":
    log = Log()
    log.debug("测试开始")
    log.info("输入密码")
    log.warning("测试结束")
    log.error("出错了")

猜你喜欢

转载自www.cnblogs.com/xiaohuhu/p/9387767.html