log4php не может найти мой класс appender - PullRequest
0 голосов
/ 27 ноября 2018

Мое приложение интенсивно использует log4php.Я хочу начать отправлять события журнала в AWS Kinesis, однако не могу найти способ сделать это, поэтому я пытаюсь написать собственный Appender.

Я скопировал LoggerAppenderConsole.php, разорвалвытащил большую часть внутренностей и написал немного кода, вызвав моего аппендера LoggerAppenderKinesis.php.Я поместил запись в LoggerAutoloader.php, чтобы мой класс загружался автоматически.

Теперь я проверяю его.Я запускаю файл kinesisTest.php в своем браузере и просматриваю код с помощью PHPStorm.Я вижу, где проблема, но я не знаю, что мне нужно сделать, чтобы ее исправить.

В функции LoggerConfiguratorDefault :: configureAppender () я наблюдаю три вызова class_exists (), один проверяет наличиемой appender и два других проверяют стандартные.т.е.

class_exists('LoggerAppenderFile') = true
class_exists('LoggerAppenderNull') = true
class_exists('LoggerAppenderKinesis') = error evaluating code

Я проверил орфографию везде и все выглядит хорошо.Мой файл класса компилируется.Имейте в виду, это все еще находится в стадии конфигурации;Я еще даже не вызывал \ Logger :: getLogger ().

Я пропускаю запись где-то еще?Что мне нужно сделать, чтобы log4php увидел мой пользовательский аппендер, когда он загружает стандартные?Я буду беспокоиться о том, что это на самом деле работает позже

1 Ответ

0 голосов
/ 28 ноября 2018

Проблема оказалась в том, что я случайно объявил закрытую переменную $ layout в моем классе, которая была защищена в родительском классе.Вот почему PHPStorm и PHP-линтер прошли его;как отдельный файл, все было в порядке.

Найти это было больно.Ошибка обнаружилась только при выполнении

spl_autoload_register(array('LoggerAutoloader', 'autoload'));

, который, конечно, вы не можете сделать или отладить.В итоге я скопировал хорошо известный Appender, переименовал его в LoggerAppenderKinesis, а затем протестировал его (то есть, сделал ли class_exists ('LoggerAppenderKinesis') == true после выполнения spl_autolaod_array ()).Затем я разорвал разделы моего нового блока Appender по частям, тестируя после каждого редактирования, пока я не опустился до объявления класса и объявления абстрактной функции.Затем я собрал его, снова тестируя после каждых нескольких правок.

Бывают дни, когда я ненавижу программирование.

...