TypeError: объект 'Logger' не вызывается при попытке использовать уже созданный объект logger - PullRequest
0 голосов
/ 11 октября 2018

У меня есть некоторый случай использования, когда классы наследуются.В базовом классе я создал объект регистратора

import logging

class abc():
   logging.basicConfig(filename=r"D:\logger.txt",format="%(asctime)s %(message)s",filemode="w")
   abcd=logging.getLogger()
   abcd.setLevel(logging.INFO)

, а в производном классе я пытался использовать тот же объект

from test import abc
import logging
class pqr(abc):
  p=logging.getLogger('abcd')
  p.setLevel(logging.INFO)

  def you(self):
    self.p("Ad")

 obj=pqr()
 obj.you()

, но я получаю это:

Traceback (most recent call last):
File "d:\Test\test2.py", line 9, in <module>
obj.you()
 File "d:\Test\test2.py", line 7, in you
self.p("Ad")
TypeError: 'Logger' object is not callable

1 Ответ

0 голосов
/ 11 октября 2018

Я не уверен, что вы пытаетесь достичь с помощью этого кода.Вы предоставили три части, но включили несколько отключенных компонентов.Давайте рассмотрим по частям:

class abc():
   logging.basicConfig(filename=r"D:\logger.txt",
                       format="%(asctime)s %(message)s",
                       filemode="w")
   abcd=logging.getLogger()
   abcd.setLevel(logging.INFO)

Вы установили класс abc, инициализировали конфигурацию logging 1 и создали атрибут класса abcd ... который вы не делаетеобратитесь к вашему более позднему коду, поэтому я не уверен, почему он находится в вашем сообщении.

class pqr(abc):
  p=logging.getLogger('abcd')
  p.setLevel(logging.INFO)

Вы получили класс pqr из вашего предыдущего класса.Затем вы создаете новый регистратор с меткой «abcd», делаете его атрибутом класса и устанавливаете уровень отчетности.* Обратите внимание, что это новый регистратор, а не тот, который вы создали в abc.

Пока все хорошо.Однако ...

# In pqr:
    def you(self):
        self.p("Ad")

# Main
obj=pqr()
obj.you()

obj.p (self.p в методе you) является регистратором класса pqr.Вы пытались вызвать объект регистратора в целом.Это не метод или функция;это целый объект логгера.Если вы ожидаете что-то записать в журнал, вам нужно вызвать соответствующий метод, такой как self.p.info(<your message>).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...