【问题标题】:log4php can't find my custom appender classlog4php 找不到我的自定义附加程序类
【发布时间】:2018-11-27 20:44:59
【问题描述】:

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

我复制了 LoggerAppenderConsole.php,撕掉了大部分内容,并编写了一些代码,调用了我的 appender 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

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

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

【问题讨论】:

    标签: php log4php


    【解决方案1】:

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

    发现它很痛苦。错误只在执行时出现

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

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

    有些日子我讨厌编程。

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      • 2015-11-02
      • 2016-08-30
      相关资源
      最近更新 更多