Настройка свойств Log4Php во время выполнения - PullRequest
1 голос
/ 06 января 2010

У меня есть приложение PHP, содержащее несколько модулей и различные настройки в каждом модуле. Я хотел бы включить ведение журнала с использованием log4php, но каждый отдельный модуль имеет свои настройки (т. Е. Уровень журнала, файл журнала и т. Д.). Некоторые из этих параметров должны быть изменены на лету конечными пользователями (уровень журнала), и я хотел бы сохранить эти свойства в базе данных.

Прямо сейчас я могу динамически устанавливать уровень логирования. Я не могу определить, как установить другие свойства динамически, хотя. Документация по настройке log4php почти исключительно выполняется через файлы свойств / xml - хотя в нем говорится, что все настройки могут быть изменены программно.

Кто-нибудь сделал что-то подобное? Если да, то как мне это сделать? Я просмотрел документацию по http://incubator.apache.org/log4php/index.html,, но мне нужна дополнительная помощь.

Чтобы уточнить - я НЕ хочу использовать файлы конфигурации, так как конечные пользователи не будут иметь прямого доступа к ним. Я предоставлю интерфейс для изменения определенных параметров ведения журнала, и все параметры будут сохранены в базе данных.

1 Ответ

3 голосов
/ 06 января 2010

Просмотр API Документов показывает, что они используют адаптеры Config и шаблон стратегии для настройки регистраторов. Адаптеры имеют единственный метод configure , который вызывается основным логгером. Существует LoggerConfiguratorPhp , который будет читать / включать файл PHP, возвращающий обычный массив PHP. Я мог предположить, что это может быть легко изменено, чтобы принять массив, возвращенный из базы данных вместо этого. Посмотрите исходный код этого класса для отправной точки. Вам нужно будет создать LoggerConfiguratorDB, который затем можно передать основному классу Logger следующим образом:

$configurator = dirname(__FILE__).'/../resources/configurator_db.php';
Logger::configure( $configurator, 'LoggerConfiguratorDb');

Я никогда не работал с Log4Php, и это просто предполагает, глядя на API. Понятия не имею, как должен выглядеть новый адаптер. Но, возможно, это приведет вас в правильном направлении.

Если вам удастся придумать что-то, почему бы не пожертвовать это проекту:)

...