Относительный путь для Zend_Log в Zend Framework - PullRequest
2 голосов
/ 11 ноября 2010

Я пытаюсь найти лучший способ настроить мой экземпляр 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 ]

6 голосов
/ 11 ноября 2010
resources.log.stream.writerParams.stream = APPLICATION_PATH "../logs/production.log"

должно работать.parse_ini_file() (который используется Zend_Config_Ini) допускает использование констант - но конкатенация не работает как в PHP (с оператором .);просто добавьте статическую строку к константе (вам может потребоваться дополнительный /, если APPLICATION_PATH не заканчивается /).

1 голос
/ 11 ноября 2010

Zend_Config_Ini использует parse_ini_file для чтения application.ini .Это означает, что он должен анализировать константы.Пожалуйста, попробуйте с вашим идеальным подходом.Убедитесь, что константа определена до загрузки application.ini

РЕДАКТИРОВАТЬ: см. Также примечание Стефана Герига о правильном формате

...