1

我的应用程序大量使用 log4php。我想开始向 AWS Kinesis 发送日志事件,但是我找不到这样做的方法,所以我正在尝试编写自定义 Appender。

我复制了 LoggerAppenderConsole.php,撕掉了大部分内容,并编写了一些代码,调用了我的附加程序 LoggerAppenderKinesis.php。我在 LoggerAutoloader.php 中输入了一个条目,因此我的类会自动加载。

现在,我测试一下。我在浏览器中运行 kinesisTest.php 文件,然后使用 PHPStorm 逐步执行代码。我知道问题出在哪里,但我不知道我需要做什么来解决它。

在 LoggerConfiguratorDefault::configureAppender() 函数中,我观察了 class_exists() 的三个调用,一个检查我的 appender,另外两个检查标准的 appender。IE

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

我检查了所有地方的拼写,一切看起来都很好。我的类文件编译。请注意,这仍处于配置阶段;我什至还没有调用 \Logger::getLogger() 。

我错过了其他地方的条目吗?我需要做什么才能让 log4php 在加载标准附加程序时看到我的自定义附加程序?我会担心它稍后会真正起作用。

4

1 回答 1

1

问题是我无意中在我的类中声明了一个名为 $layout 的私有变量,该变量在父类中受到保护。这就是 PHPStorm 和 PHP linter 通过它的原因;作为一个独立的文件,它很好。

找到它很痛苦。该错误仅在执行时出现

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

当然,您无法进入或调试。我最终复制了一个众所周知的 Appender,将其重命名为 LoggerAppenderKinesis,然后对其进行了测试(意思是 class_exists('LoggerAppenderKinesis') == true 在执行 spl_autolaod_array() 之后)。然后我逐块撕下我的新 Appender 的部分,在每次编辑后进行测试,直到我只剩下类声明和抽象函数声明。然后我重新构建它,每隔几次编辑后再次测试。

有几天我讨厌编程。

于 2018-11-27T23:18:49.800 回答