2016-05-12 5 views
0

Я очень новичок в python. Я пишу демона в python, и у моего демона у меня есть класс logger. Класс Logger - это то, что мне нужно использовать во всем моем демоне. Скорее, создавая новый экземпляр класса внутри каждого из моих классов или передавая объект класса logger, я хочу реализовать такой PHP-статический класс, чтобы он кэшировал соединение с базой данных внутри, и я могу вызвать его из любого места без создания экземпляра , Нравится,PHP как статические методы в python

Logger::log('This is cool'); 

Как это сделать в python?

+0

Оформить заказ: http://stackoverflow.com/questions/6760685/creating-a-singleton-in-python – HuStmpHrrr

+0

Вы изучали существующие регистраторы Python (например, модуль 'logging') и/или их реализацию? Вероятно, это лучший подход для этой конкретной проблемы. – deceze

ответ

1

вы можете попробовать logging модуль. logging.getLogger обеспечивает

Все вызовы этой функции с заданным именем возвращают один и тот же экземпляр регистратора. Это означает, что экземпляры регистратора никогда не должны передаваться между различными частями приложения.

Например, в любом месте, когда вы вызываете logging.getLogger('the-logger-name'), вы всегда получаете тот же объект.

Как вы хотите записать свои журналы в базу данных, вам необходимо реализовать свой собственный handler, который подключается к базе данных и подключается к регистратору через logger.addHanlder.

При реализации обработчика пути извлечения из logging.Handler, вы не должны переопределить каждый метод - проверка, как BufferingHandler делает в Питоне handlers implementation.

Смежные вопросы