Из вашего фрагмента кода неясно, как именно вы собираетесь инициализировать свои классы (порядок, количество копий и т. Д.).Я думаю, что ваша проблема в том, что вы пытаетесь настроить отдельный обработчик потока для каждого регистратора классов.
В общем, для использования регистрации в Python вы хотите сделать следующее:
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...