LINUX.ORG.RU

Переключить файл для appender'а Log4perl?

 log4perl,


0

1

Хотелось бы иметь возможность переключать файл, в который пишет Appender, но так, чтобы можно было писать в файл с произвольным именем, а не просто переоткрывать файловый дексриптор на то же имя.

Честно, лень сильно ковырять на эту тему исходники Log4perl. Может, делал уже кто такую фишку?

Понятно, что можно поменять настройки Log4perl и сделать весь init заново, но... вероятно, должен быть более простой способ?

★★★★★

Не совсем понял проблему. Задача именно в переключении при использовании log4perl? Я с этим модулем мало работал, но обычно всё решается простейшим select.

shell-script ★★★★★
()
Ответ на: комментарий от DELIRIUM

Ну так вынеси весь инит логгера в одну функцию и дёргай её по sighup, в чём проблема?

Проблема в том, что пациент ленив:

Честно, лень сильно ковырять на эту тему исходники Log4perl. Может, делал уже кто такую фишку?

Если ничего не помогает, прочтите, наконец, документацию:

Log::Log4perl->init_and_watch($conf_file, 'HUP');

This will set up a signal handler for SIGHUP and reload the configuration if the application receives this signal, e.g. via the kill command:

kill -HUP pid
debugger ★★★★★
()
Ответ на: комментарий от debugger

Однако, нет. Мне этот вариант не подходит, потому я и написал этот вопрос.

Т.е. мне нужно решение без полной инициализации всего Log4perl'а. А именно - нужно:

1) Каким-то образом поменять имя файла, в который пишет аппендер;

2) Заставить файловый аппендер закрыть файловый дескриптор и открыть его заново.

Со 2м никаких принципиальных проблем нет, это штатный функционал, который, да будет вам известно, работает просто на уровне аппендера, без идиотских действий по сотворению мира заново.

Проблема с 1м, а именно с тем, как изменить имя файла, чтобы на 2м шаге аппендер открыл файл с новым именем.

Ммм? Есть идеи? Или они на init'е у всех дружно иссякли?

DRVTiny ★★★★★
() автор топика
Последнее исправление: DRVTiny (всего исправлений: 2)
Ответ на: комментарий от DELIRIUM

Проблема в том, что Log4perl - весьма тяжёлая штука, количество сущностей (тех же аппендеров) и сложность их реализации там не ограничены (можно написать аппендер, который полчаса устанавливает соединение с модемом на станции Амундсена в Антарктиде), и полная переинициализация Log4perl в общем случае запросто может быть крайне затратной операцией.

DRVTiny ★★★★★
() автор топика
Ответ на: комментарий от DRVTiny

…без идиотских действий по сотворению мира заново.

Стандартная программистская позиция что все вокруг идиоты, а ты один гениальный программист?

Ммм? Есть идеи? Или они на init'е у всех дружно иссякли?

Если уж тебе самому лениво, то что ты ждал от всех остальных? Что все кинутся решать твою проблему, которую ты даже поленился сформулировать сразу?

Вот тебе идея номер два: Написать свой аппендер с блекджеком и шлюхами. Задачка не выглядит архисложной: унаследоваться от существующего и до/пере/определить пару методов.

debugger ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.