Я полагаю, вы могли бы сделать что-то похожее на то, что делается в Java с пакетом Log4j (и, вероятно, это делается с его версией Log4c):
Иметь статический метод, который может возвращать несколько экземпляров регистратора:
Logger someLogger = Logger.getLogger("logger.name");
Метод getLogger()
не возвращает одноэлементный объект.Он возвращает именованный регистратор (создавая его при необходимости).Logger
- это просто интерфейс (в C ++ это может быть полностью абстрактный класс) - вызывающему не нужно знать фактические типы создаваемых Logger
объектов.
Вы можете продолжитьимитировать Log4j и иметь перегрузку getLogger()
, которая также принимает объект фабрики:
Logger someLogger = Logger.getLogger("logger.name", factory);
Этот вызов будет использовать factory
для создания экземпляра регистратора, предоставляя вам больше контроля над тем, что лежит в основе Logger
объектовбыли созданы, вероятно, помогая вам издеваться.
Так что нет необходимости передавать что-либо в конструкторы, методы и т. д. вашего собственного кода.Вы просто берете желаемое имя Logger
, когда вам это нужно, и входите в него.В зависимости от безопасности потока кода записи, который вы пишете, вы можете иметь то, что getLogger()
возвращает, будет статическим членом вашего класса, поэтому вам нужно будет вызывать getLogger()
только один раз для класса.