鱼C论坛

 找回密码
 立即注册
查看: 473|回复: 1

请问这个log打印多次的问题

[复制链接]
发表于 2018-12-29 20:10:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个log类封装了logging
最下边声明了3个不同的对象
实际输出了3次相同的log
打印了3次,我查了一些资料是因为每次对象init时候就addHandler一个句柄 有3个句柄就输出了3次
但是很蒙圈 a\b\c 3个对象难道不是各自有一个handlers吗  为什么是3个对象公用一个handlers……



  1. import os
  2. import sys
  3. import time
  4. import logging
  5. from common.readconfig import ReadConfig

  6. readconfig = ReadConfig()

  7. class logger:
  8.     def __init__(self, set_level="debug",
  9.                  name=os.path.split(os.path.splitext(sys.argv[0])[0])[-1],
  10.                  log_name=time.strftime("%Y-%m-%d.log", time.localtime()),
  11.                  log_path=os.path.join(readconfig.get_path('rootpath'),'file',"logs"),
  12.                  use_console=True):
  13.         '''
  14.             set_level: 设置日志的打印级别,默认为DEBUG
  15.             name: 日志中将会打印的name,默认为运行程序的name
  16.             log_name: 日志文件的名字,默认为当前时间(年-月-日.log)
  17.             log_path: 日志文件夹的路径,默认为 项目根目录\file\logs
  18.             use_console: 是否在控制台打印,默认为True
  19.         '''
  20.         self.logger = logging.getLogger(name)
  21.         #设置Lv
  22.         if set_level.lower() == "critical":
  23.             self.logger.setLevel(logging.CRITICAL)
  24.         elif set_level.lower() == "error":
  25.             self.logger.setLevel(logging.ERROR)
  26.         elif set_level.lower() == "warning":
  27.             self.logger.setLevel(logging.WARNING)
  28.         elif set_level.lower() == "info":
  29.             self.logger.setLevel(logging.INFO)
  30.         elif set_level.lower() == "debug":
  31.             self.logger.setLevel(logging.DEBUG)
  32.         else:
  33.             self.logger.setLevel(logging.NOTSET)
  34.         #检查路径 没有创建
  35.         if not os.path.exists(log_path):
  36.             os.makedirs(log_path)
  37.         #文件路径
  38.         log_file_path = os.path.join(log_path, log_name)
  39.         #文件句柄
  40.         log_handler = logging.FileHandler(log_file_path)
  41.         log_handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
  42.         self.logger.addHandler(log_handler)
  43.         #判断是否控制台显示
  44.         if use_console:
  45.             #控制台句柄
  46.             console_handler = logging.StreamHandler()
  47.             console_handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
  48.             self.logger.addHandler(console_handler)

  49.     def addHandler(self, hdlr):
  50.         self.logger.addHandler(hdlr)

  51.     def removeHandler(self, hdlr):
  52.         self.logger.removeHandler(hdlr)

  53.     def critical(self, msg, *args, **kwargs):
  54.         self.logger.critical(msg, *args, **kwargs)

  55.     def warning(self, msg, *args, **kwargs):
  56.         self.logger.warning(msg, *args, **kwargs)

  57.     def error(self, msg, *args, **kwargs):
  58.         self.logger.error(msg, *args, **kwargs)

  59.     def info(self, msg, *args, **kwargs):
  60.         self.logger.info(msg, *args, **kwargs)

  61.     def debug(self, msg, *args, **kwargs):
  62.         self.logger.debug(msg, *args, **kwargs)

  63.     def log(self, level, msg, *args, **kwargs):
  64.         self.logger.log(level, msg, *args, **kwargs)


  65. a = logger()
  66. b = logger()
  67. c = logger()

  68. a.info("aaaaaa")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-2-23 14:41:46 | 显示全部楼层
果然啊 这种实在问题是没人能回复的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 19:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表