функция регистратора состоит в том, чтобы на самом деле шунтировать сообщения к системному журналу; конфигурации по умолчанию будут предварительно ожидать метку времени и выписывать журналы к/var/log/messages, но это не означает, что цель регистратора состоит в том, чтобы предварительно ожидать метку времени.
Один способ обработать это состоял бы в том, чтобы изменить Ваши конфигурации системного журнала, таким образом, что Ваши сообщения, направленные через регистратор, переходят к специальному файлу - используют флаг "-p" для регистратора для предусматривания facility.priority пары (возможно, один из пользователя [1.. 7] средства), и настраивают Ваш syslogd для входа того средства в специальный файл.
С другой стороны, Вы могли сделать на скорую руку быструю функцию оболочки для простого предварительного ожидания метки времени:
Bodacious:~ james$ timestamp () {
> f=`date`
> echo $f $*
> }
You have new mail in /var/mail/james
Bodacious:~ james$ timestamp a line of logs
Tue 18 Jan 2011 22:40:24 EST a line of logs
Bodacious:~ james$
В моей системе это собирается привести к оболочке, разветвляющейся/bin/date однажды на строку вывода. Это неэффективно, но вероятно приемлемо в мелких масштабах.
Вы могли использовать -t
отметить каждую строку и затем заставить Ваш сервер системного журнала фильтровать в различный файл на основе того тега.
(Отредактированный для вынимания неправильной ссылки к -f
флаг)
Используя ответ от Команды для предварительного ожидания строки к каждой строке?, я нашел это самым легким решением:
cmd | sed "s/^/`date +'%a %b %d %k:%M:%S'` /"
Мне нужно было что-то в этом роде, и Google нашел меня здесь. Использование чего-то вроде syslog определенно является излишним для того, чтобы просто попытаться отследить время, а распечатка каждую секунду слишком неудобна.
Вот однострочник, который, кажется, работает нормально:
cmd | { while read R; do echo "$(date +%s) $R"; done }
и вариант, который печатает время, необходимое для создания каждой строки:
cmd | { T=$(date +%s); while read R; do T2=$(date +%s); echo "$((T2-T)) $R"; T=$T2; done }
(Это использует секунды, вероятно, не так уж сложно добавить туда% N, но на этом уровне решение оболочки, вероятно, в любом случае не подходит.)