Hello! On Friday 28 August 2009 15:02:52 Alexander Galanin wrote: > On Fri, 28 Aug 2009 14:51:55 +0400 > Alexey Pechnikov <pechni...@mobigroup.ru> wrote: > > > Hello! > > > > On Friday 28 August 2009 14:07:02 Alexander Galanin wrote: > > > rsyslog, к примеру (никто ведь не заставляет использовать только одну из > > > многочисленных инкарнаций syslogd), умеет составлять имя файла из > > > полей сообщения. Вот неизменённый кусок из документации, который, я > > > надеюсь, ты осилишь допилить до нужного тебе: > > > > > > $template DynFile,"/var/log/%HOSTNAME%/%programname%.log" > > > > Этот процесс клонируется сколько-то раз (в том числе, каждый > > разработчик может для себя один или более экземпляров запустить), при этом > > меняется число NNN. Каждый процесс посылает сообщения разного уровня в > > сислог (ошибки, информация, предупреждения, плюс еще нужно разделить > > сообщения по имени модуля регекспами). Логи должны писаться с правами > > пользователя, который запустил клон и желательно в ~/log/.... Положим, > > NNN можно передать в самих сообщениях, rsyslog в этом случае логи разделит. > > Но пользователя получить не удастся, такая информация в syslog не > > передается. > > А ты передай. Рядом с NNN.
Сервис может быть запущен пользователем X, но от имени www-data. Это только система init знает, кто же на самом деле запустил. > > Есть ли какая-то утилита, которая > > умеет с stdout брать лог и пересылать в syslog - чтобы объединять сообщения > > в единый лог-файл? > > Наверно я открою тебе великую тайну, но можно сделать ещё и > $command >logfile 2>errlogfile > причём безо всяких проходов через syslog. > И потом останавливать этот так называемый сервис в том же xterm-е, в > котором ты его запустил, с помощью Ctrl-C. Полезнее ctrl+z; bg 1; fg 1 :-) Вот только настроить размеры буферов чтения из stdout и записи в файл лога уже не так тривиально. Да еще ротировать нужно. Для того syslog и полезен, что позволяет эффективно писать большие логи и ротировать их. Но, к сожалению, на этом его достоинства практически заканчиваются. > А уж если тебе понадобится форвардить stdout и stderr в syslog, написать > малюсенькую утилиту в 10 строк на си сможет кто угодно, у кого команда > "man 3 syslog" не вызывает священного ужаса. runit/daemontools это и так делают - берут с stdout/stderr и пишут в нужный лог от имени пользователя, фильтруют и ротируют. Притом они точно знают, кто же запустил данный сервис, даже если он выполняется с правами совсем иного юзера и могут логировать в домашнюю директорию с нужными правами. И буферы ввода-вывода позволяют настроить. Да, если вам так просто написать эту самую малюсенькую утилиту, которая будет через init-систему определять истинного владельца (по имени сервиса можно найти скрипт запуска), собирать логи, менять конфигурацию сислога для логирования в нужную директорию и проч., хотелось бы это увидеть :-) Best regards, Alexey Pechnikov. http://pechnikov.tel/