Извлечь запись из нескольких объектов
У меня проблема с настройкой ведения журнала для нескольких объектов.
В настоящее время у меня есть два класса, представляющих server
и coordinator
, Они составлены так, что coordinator
имеет server
как в переменной экземпляра.
Увидеть ниже:
class Coordinator(object):
def __init__(self):
self.scheduler = asyncio.get_event_loop()
self.server = Server(..)
class Server(object):
def __init__(self, scheduler, host, port):
...
# Configure WebSocket logging
self.logger = logging.getLogger('websockets')
self.logger.setLevel(logging.DEBUG)
self.logger.addHandler(logging.StreamHandler())
...
Прежде чем я добавил coordinator
Класс регистрации в server
класс смог извлечь значения websockets и отобразить вывод.
Это больше не работает. Как я могу решить эту проблему и добавить дополнительный регистратор в Coordinator
учебный класс?
Я использую Python 3.6.8
Спасибо
1 ответ
Из вашего фрагмента кода неясно, как именно вы собираетесь инициализировать свои классы (порядок, количество копий и т. Д.). Я думаю, что ваша проблема заключается в том, что вы пытаетесь настроить отдельный обработчик потока для каждого регистратора классов.
В общем, для использования Python Logging вы хотите сделать следующее:
1) Настройте ведение журнала рядом с вашей главной точкой входа
Это состоит из настройки любых обработчиков для контроля, куда будут отправляться сообщения журнала и какие уровни сообщений. Самый простой способ сделать это - вызвать logging.basicConfig (..). Вы хотите, чтобы это было сделано один раз и только один раз. Также вы хотите, чтобы это происходило перед любыми вашими вызовами регистрации, поэтому обычно это будет одной из первых вещей в вашей главной (..) функции.
2) Создание и использование регистраторов на их месте
Вы можете создать столько регистраторов, сколько захотите, и дать им любое имя. Создание одного на модуль, используя log = logging.getLogger(__name__)
Это хороший способ начать, но вы можете вместо этого делать по классу, если вы предпочитаете.
Пример:
import logging
class Coordinator(object):
def __init__(self):
self.logger = logging.getLogger('Coordinator')
self.server = Server()
def do_whatever(self):
self.logger.warn("In coordinator")
self.server.do_whatever()
class Server(object):
def __init__(self):
self.logger = logging.getLogger('Server')
def do_whatever(self):
self.logger.warn("in server")
if __name__ == '__main__':
# Logs to stderr by default all messages DEBUG or higher
logging.basicConfig(level=logging.DEBUG)
# Set the logging level specifically for the websockets log object
logging.getLogger('websockets').setLevel(logging.INFO)
c = Coordinator()
c.do_whatever()
Какие журналы для stderr:
WARNING:Coordinator:In coordinator
WARNING:Server:in server
INFO:websockets:...whatever this library logs...