Почему мой журнал был напечатан два раза - PullRequest
0 голосов
/ 29 июня 2018

Почему мой журнал был напечатан два раза У меня есть три файла Python Когда я звоню test2: мой журнал был напечатан два раза

2018-06-29 20:41:36,466 - test - INFO - 2222222222222222222
2018-06-29 20:41:36,466 - test - INFO - 2222222222222222222

Я не вызывал метод AAA my_print.

handle_log.py

#-*-coding:utf-8-*-
import logging
import logging.handlers
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

        # #error日志发送邮件
        #
class Logger(object):
    def __init__(self, path='test',title=None):
        # 得到一个日志对象
        self.logger = logging.getLogger(path)
        # 修改默认级别
        self.logger.setLevel(logging.INFO)

        #将日志发送至邮件
        self.mail_log = logging.handlers.SMTPHandler(('mail.test.com',123),'u2_dev_send@test.com','test@test.com',title,credentials=('test@test.com','test'),secure=None)
        self.mail_log.setLevel(logging.ERROR)

        # 记录日志的文件和级别
        self.write_log = logging.FileHandler("all.log")
        self.write_log.setLevel(logging.INFO)

        # 打印日志的到窗口上
        self.print_log = logging.StreamHandler()
        self.print_log.setLevel(logging.INFO)

        # 设置日志格式
        formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
        self.write_log.setFormatter(formatter)
        self.print_log.setFormatter(formatter)
        self.mail_log.setFormatter(formatter)

        # 将相应的发送目的地添加到logger对象中
        self.logger.addHandler(self.write_log)
        self.logger.addHandler(self.print_log)
        self.logger.addHandler(self.mail_log)

    # def __del__(self):
    #     self.logger.removeHandler(self.write_log)
    #     self.logger.removeHandler(self.print_log)
    #     self.logger.removeHandler(self.mail_log)

    def debug(self, message):
        self.logger.debug(message)
        # self.logger.removeHandler(self.print_log)
        # self.logger.removeHandler(self.mail_log)
        # self.logger.removeHandler(self.write_log)

    def info(self, message):
        self.logger.info(message)
        # self.logger.removeHandler(self.print_log)
        # self.logger.removeHandler(self.mail_log)
        # self.logger.removeHandler(self.write_log)

    def war(self, message):
        self.logger.warning(message)
        # self.logger.removeHandler(self.print_log)
        # self.logger.removeHandler(self.mail_log)
        # self.logger.removeHandler(self.write_log)

    def error(self, message):
        self.logger.error(message)
        # self.logger.removeHandler(self.print_log)
        # self.logger.removeHandler(self.mail_log)
        # self.logger.removeHandler(self.write_log)

    def cri(self, message):
        self.logger.critical(message)
        # self.logger.removeHandler(self.print_log)
        # self.logger.removeHandler(self.mail_log)
        # self.logger.removeHandler(self.write_log)

test1.py

#-*-coding:utf-8-*-
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# sys.path.append('/data1/test/app_sem')
sys.path.append('/root/request2_python/')
from sem.handle_log import Logger


class AAAA(object):
    def __init__(self):
        self.log = Logger(title='bbbbbbbbbbb')
    def my_print(self):
        self.log.info('1111111111111111111111')



# a = AAAA()
# a.my_print()

test2.py

#-*-coding:utf-8-*-

import sys
reload(sys)
sys.setdefaultencoding('utf8')
# sys.path.append('/data1/test/app_sem')
sys.path.append('/root/request2_python/')
from sem.handle_log import Logger
from sem.vivo.test1 import AAAA


class BBBB(object):
    def __init__(self):
        self.log_test2 = Logger(title='cccccccc')
    def my_print_b(self):
        self.log_test2.info('2222222222222222222')

b = BBBB()
a = AAAA()
# a.my_print()
b.my_print_b()
# b.my_print_b()

результат:

2018-06-29 20:41:36,466 - test - INFO - 2222222222222222222
2018-06-29 20:41:36,466 - test - INFO - 2222222222222222222

Почему одна и та же строка журнала печатается дважды?

1 Ответ

0 голосов
/ 29 июня 2018

Все ваши логгеры имеют одно и то же имя "test", поэтому, когда вы отправляете лог-сообщение для "test", все они реагируют.

Чтобы иметь возможность иметь многократные логгеры, убедитесь, что вы называете их разными именами, например, с помощью переменной «path».

Или, например:

class Logger(object):
def __init__(self, path='test',title=None):
    self.logger = logging.getLogger(path + title)
    [...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...