log4php настроить каталог журналов

Я настраиваю 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' ;

Спасибо за вашу помощь

1

Решение

Вы можете (и, вероятно, должны) использовать конфигурацию на основе PHP-массива для Log4PHP. Это позволяет использовать динамический код для создания конфигурации.

И кстати: есть волшебная константа __DIR__ который содержит каталог, в котором находится текущий файл PHP. В то же время __FILE__ содержит имя файла текущего файла PHP Тот dirname('/') трюк не должен работать — он выведет строку "/" — объединение его с путем, начинающимся с «..», приведет к попытке перейти на один уровень за пределы корневого каталога — который является корневым каталогом.

Доступ к пути "." также бесполезен, потому что точка является синонимом «текущего каталога». Точка в середине пути никуда не денется, она останется там, где она есть.

Так dirname('/').'.././libs/log4php/Logger.php' эквивалентно "/.././libs/log4php/Logger.php", что эквивалентно "/libs/log4php/Logger.php", Если ваш файл случайно оказался там, вы можете неправильно интерпретировать ваш код как «работающий».

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]