我的应用程序大量使用log4php。我想开始向AWS Kinesis发送日志事件,但是,我找不到解决方法,因此 我正在尝试编写自定义Appender。
我复制了LoggerAppenderConsole.php,撕掉了大部分内脏,并编写了一些代码,调用了我的appender LoggerAppenderKinesis.php。我在LoggerAutoloader.php中输入了一个条目,以便自动加载我的类。
现在,我对其进行测试。我在浏览器中运行kinesisTest.php文件,并使用PHPStorm逐步浏览代码。我知道问题出在哪里 但是我不知道该怎么做。
在LoggerConfiguratorDefault :: configureAppender()函数中,我观察了class_exists()的三个调用,其中一个检查了我的 追加程序,另两个检查标准程序。即
class_exists('LoggerAppenderFile') = true
class_exists('LoggerAppenderNull') = true
class_exists('LoggerAppenderKinesis') = error evaluating code
我检查了所有地方的拼写 ,看起来一切正常。我的班级文件编译。请注意,这仍然存在 配置阶段;我什至还没有叫\ Logger :: getLogger()。
我是否在其他地方缺少条目?我需要怎么做才能让log4php看到我的自定义附加程序,当它加载标准的附加程序时?我担心它稍后会真正起作用。
答案 0 :(得分:1)
问题出在我的类中,我无意中声明了一个名为$ layout的私有变量,该私有变量在父类中受到保护。这就是PHPStorm和PHP linter通过它的原因。作为独立文件,很好。
发现它很痛苦。该错误仅在执行时出现
spl_autoload_register(array('LoggerAutoloader', 'autoload'));
您当然不能进入或调试。我最终复制了一个著名的Appender,将其重命名为LoggerAppenderKinesis,然后对其进行了测试(这意味着在执行spl_autolaod_array()之后,class_exists('LoggerAppenderKinesis')== true)。然后,我逐块撕下新Appender的各个部分,在每次编辑后进行测试,直到我只剩下类声明和抽象函数声明为止。然后,我将其备份,并在每进行几次编辑后再次进行测试。
有几天我讨厌编程。