Zend Framework中Zend_Log的相对路径

时间:2010-11-11 07:53:34

标签: zend-framework bootstrapping zend-log

我正在尝试找出配置Zend_Log_Writer_Stream实例的最佳方法,以便写入相对于我的APPLICATION_PATH的文件名。

例如,使用以下配置:

resources.log.stream.writerName = "Stream"
resources.log.stream.writerParams.stream = "logs/production.log"

初始化loggger的常规方法是使用应用程序引导资源或执行以下操作:

$logger = Zend_Log::factory($config->resources->log);

这个问题是Zend_Log_Writer_Stream :: factory方法将尝试访问相对于当前脚本执行的文件,而不是APPLICATION_PATH。

因为几乎总是index.php里面/ public通常它不是戏剧性的,所以当我在单元测试目录中执行单个脚本时,它将使用该目录来建立路径。

理想情况下,我希望能够设置:

resources.log.stream.writerParams.stream = APPLICATION_PATH . "../logs/production.log"

因此它始终使用可预测的位置。我宁愿不必破解Zend_Log继承类的工厂方法来使其工作。

我很想知道其他人是如何解决这个问题的。

2 个答案:

答案 0 :(得分:6)

resources.log.stream.writerParams.stream = APPLICATION_PATH "../logs/production.log"

应该有效。 Zend_Config_Ini(由.使用)允许使用常量 - 但是连接不像PHP(使用/运算符)那样工作;只需将静态字符串附加到常量(如果APPLICATION_PATH不以/结尾,则可能需要额外的{{1}}。

答案 1 :(得分:1)

Zend_Config_Ini在内部使用parse_ini_file来阅读 application.ini 。这意味着,它应该解析常量。请尝试理想的方法。确保在加载 application.ini

之前定义常量

编辑:另见Stefan Gehrig关于使用正确格式的说明