Hello! On Friday 28 August 2009 14:07:02 Alexander Galanin wrote: > rsyslog, к примеру (никто ведь не заставляет использовать только одну из > многочисленных инкарнаций syslogd), умеет составлять имя файла из > полей сообщения. Вот неизменённый кусок из документации, который, я > надеюсь, ты осилишь допилить до нужного тебе: > > $template DynFile,"/var/log/%HOSTNAME%/%programname%.log"
Пример процесса: /usr/sbin/aolserver4-nsd -i -u www-data -g www-data -b 127.0.0.1:8NNN -s main -t /var/www/offlineNNN/etc/aolserver4.tcl Этот процесс клонируется сколько-то раз (в том числе, каждый разработчик может для себя один или более экземпляров запустить), при этом меняется число NNN. Каждый процесс посылает сообщения разного уровня в сислог (ошибки, информация, предупреждения, плюс еще нужно разделить сообщения по имени модуля регекспами). Логи должны писаться с правами пользователя, который запустил клон и желательно в ~/log/.... Положим, NNN можно передать в самих сообщениях, rsyslog в этом случае логи разделит. Но пользователя получить не удастся, такая информация в syslog не передается. И как изменить права на эти лог-файлы? Есть ли какая-то утилита, которая умеет с stdout брать лог и пересылать в syslog - чтобы объединять сообщения в единый лог-файл? Запуск и логирование через runit решает все описанные выше задачи, чем он мне и понравился (в том числе можно разрешить пользователям от их имени управлять своими сервисами, даже sudo не давая). Правила запуска и логирования для runit - отдельные скрипты для каждого сервиса, так что клонировать просто. Имхо на стандартном init/syslog подобное нереализуемо. Вот для каких-то глобальных вещей, например, сбора access log всех серверов, rsyslog удобен, раз настроил и работает. А для множества динамически создаваемых и конфигурируемых сервисов syslog вообще никак не пригоден. Best regards, Alexey Pechnikov. http://pechnikov.tel/