Я настраиваю log4php с помощью XML. Вот моя конфигурация:
<appender name="mainAppender" class="LoggerAppenderDailyFile">
<layout class="LoggerLayoutPattern">
<param name="conversionPattern" value="%d{Y-m-d H:i:s.u T P} [%logger] [%level],[%method,%location] %message;%ex%newline" />
</layout>
<param name="file" value=".././logs/main_log-%s.log" />
<param name="datePattern" value="Y-m-d" />
</appender>
<logger name="MainLogger">
<appender_ref ref="mainAppender" />
</logger>
<root>
<level value="TRACE" />
<appender_ref ref="mainAppender" />
</root>
Я хочу, чтобы журнал всегда хранился в одном и том же каталоге, но приведенная выше конфигурация создаст файл журнала в другом месте, если я вызову
Logger::getLogger('MyLogger');
в другом месте. Как я могу получить родительский каталог внутри XML? Я думал о чем-то вроде:
<param name="file" value=dirname('/').".././logs/main_log-%s.log" />
Это, конечно, не работает.
Обычно в php, чтобы избежать этой проблемы, я использую:
include_once dirname('/').'.././libs/log4php/Logger.php' ;
Спасибо за вашу помощь
Вы можете (и, вероятно, должны) использовать конфигурацию на основе PHP-массива для Log4PHP. Это позволяет использовать динамический код для создания конфигурации.
И кстати: есть волшебная константа __DIR__
который содержит каталог, в котором находится текущий файл PHP. В то же время __FILE__
содержит имя файла текущего файла PHP Тот dirname('/')
трюк не должен работать — он выведет строку "/"
— объединение его с путем, начинающимся с «..», приведет к попытке перейти на один уровень за пределы корневого каталога — который является корневым каталогом.
Доступ к пути "."
также бесполезен, потому что точка является синонимом «текущего каталога». Точка в середине пути никуда не денется, она останется там, где она есть.
Так dirname('/').'.././libs/log4php/Logger.php'
эквивалентно "/.././libs/log4php/Logger.php"
, что эквивалентно "/libs/log4php/Logger.php"
, Если ваш файл случайно оказался там, вы можете неправильно интерпретировать ваш код как «работающий».
Других решений пока нет …