Отключить или обнаружить конфигурацию по умолчанию

У меня есть php файл, который содержит класс "FooClass", используемый в нескольких проектах. Недавно я добавил метод входа в систему с помощью log4net, например так:

private static function log($message,$level=0)
{
    if(!isset(self::$logger))
    {
        if(!class_exists("Logger")) return;
        self::$logger = Logger::getLogger("DBw");
        if(!isset(self::$logger)) return;
    }
    //logging
}

Некоторые файлы, которые используют FooClass, могут определить конфигурацию, выполнив команду Logger::configure("config.xml"). Но другие не определяют его, и в этом случае FooClass начинает использовать LoggerConfiguratorDefault, который отслеживает журналы как "эхо". Это не приемлемо.

Я хочу посмотреть, если конфигурация не определена другими файлами, FooClass не регистрировался с LoggerConfiguratorDefault.

Как я могу отключить LoggerConfiguratorDefault или обнаружить использование этого и сделать возврат из функции?

1 ответ

Решение

Я был в том же положении, немного другой случай: мой объект конфигурации регистрирует, если я получаю доступ к значению, но он не может войти, если я получаю доступ к значению конфигурации для файла конфигурации регистратора.

Класс Loggerlog4php имеет приватное статическое свойство $initialized, который доступен через приватный статический метод isInitialized(), Я решил свою проблему, используя Reflection для доступа к значению статического свойства, и если результат был false Я вернул самодельный NullLogger extends Logger это ничего не делает, если какие-либо методы ведения журнала вызываются.

Ваш класс может сделать то же самое, но лучшим решением будет гарантировать, что log4php всегда инициализируется.

Я бы посоветовал вам создать заявку в проектах Jira, чтобы решить эту проблему проще. Там действительно нет необходимости иметь Logger::isInitialized() метод приватный.

Другие вопросы по тегам