Отключить или обнаружить конфигурацию по умолчанию
У меня есть 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 ответ
Я был в том же положении, немного другой случай: мой объект конфигурации регистрирует, если я получаю доступ к значению, но он не может войти, если я получаю доступ к значению конфигурации для файла конфигурации регистратора.
Класс Logger
log4php имеет приватное статическое свойство $initialized
, который доступен через приватный статический метод isInitialized()
, Я решил свою проблему, используя Reflection для доступа к значению статического свойства, и если результат был false
Я вернул самодельный NullLogger extends Logger
это ничего не делает, если какие-либо методы ведения журнала вызываются.
Ваш класс может сделать то же самое, но лучшим решением будет гарантировать, что log4php всегда инициализируется.
Я бы посоветовал вам создать заявку в проектах Jira, чтобы решить эту проблему проще. Там действительно нет необходимости иметь Logger::isInitialized()
метод приватный.