|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这个log类封装了logging
最下边声明了3个不同的对象
实际输出了3次相同的log
打印了3次,我查了一些资料是因为每次对象init时候就addHandler一个句柄 有3个句柄就输出了3次
但是很蒙圈 a\b\c 3个对象难道不是各自有一个handlers吗 为什么是3个对象公用一个handlers……
- import os
- import sys
- import time
- import logging
- from common.readconfig import ReadConfig
- readconfig = ReadConfig()
- class logger:
- def __init__(self, set_level="debug",
- name=os.path.split(os.path.splitext(sys.argv[0])[0])[-1],
- log_name=time.strftime("%Y-%m-%d.log", time.localtime()),
- log_path=os.path.join(readconfig.get_path('rootpath'),'file',"logs"),
- use_console=True):
- '''
- set_level: 设置日志的打印级别,默认为DEBUG
- name: 日志中将会打印的name,默认为运行程序的name
- log_name: 日志文件的名字,默认为当前时间(年-月-日.log)
- log_path: 日志文件夹的路径,默认为 项目根目录\file\logs
- use_console: 是否在控制台打印,默认为True
- '''
- self.logger = logging.getLogger(name)
- #设置Lv
- if set_level.lower() == "critical":
- self.logger.setLevel(logging.CRITICAL)
- elif set_level.lower() == "error":
- self.logger.setLevel(logging.ERROR)
- elif set_level.lower() == "warning":
- self.logger.setLevel(logging.WARNING)
- elif set_level.lower() == "info":
- self.logger.setLevel(logging.INFO)
- elif set_level.lower() == "debug":
- self.logger.setLevel(logging.DEBUG)
- else:
- self.logger.setLevel(logging.NOTSET)
- #检查路径 没有创建
- if not os.path.exists(log_path):
- os.makedirs(log_path)
- #文件路径
- log_file_path = os.path.join(log_path, log_name)
- #文件句柄
- log_handler = logging.FileHandler(log_file_path)
- log_handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
- self.logger.addHandler(log_handler)
- #判断是否控制台显示
- if use_console:
- #控制台句柄
- console_handler = logging.StreamHandler()
- console_handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
- self.logger.addHandler(console_handler)
- def addHandler(self, hdlr):
- self.logger.addHandler(hdlr)
- def removeHandler(self, hdlr):
- self.logger.removeHandler(hdlr)
- def critical(self, msg, *args, **kwargs):
- self.logger.critical(msg, *args, **kwargs)
- def warning(self, msg, *args, **kwargs):
- self.logger.warning(msg, *args, **kwargs)
- def error(self, msg, *args, **kwargs):
- self.logger.error(msg, *args, **kwargs)
- def info(self, msg, *args, **kwargs):
- self.logger.info(msg, *args, **kwargs)
- def debug(self, msg, *args, **kwargs):
- self.logger.debug(msg, *args, **kwargs)
- def log(self, level, msg, *args, **kwargs):
- self.logger.log(level, msg, *args, **kwargs)
- a = logger()
- b = logger()
- c = logger()
- a.info("aaaaaa")
复制代码 |
|