У меня есть постоянно работающий скрипт, который я выводил в файл журнала:
script.sh >> /var/log/logfile
Я хотел бы добавить отметку времени перед каждой строкой, добавляемой в журнал. Подобно:
Sat Sep 10 21:33:06 UTC 2011 The server has booted up. Hmmph.
Могу ли я использовать джиу-джитсу?
Ответы:
Вы можете передать вывод скрипта через цикл, который ставит префикс текущей даты и времени:
Если вы будете часто этим пользоваться, легко сделать функцию bash для обработки цикла:
источник
read
обрезку пробелов в начале и в строке. Он устанавливает IFS (внутренний разделитель полей bash, в основном список пробельных символов) для команды пустымread
.echo
интерпретируют escape-последовательности. Если вы действительно хотите, чтобы он не связывался с контентом (кроме добавления дат), заменитеecho
команду наprintf "%s %s\n" "$(date)" "$line"
date -u +"%Y-%m-%dT%H:%M:%SZ"
или, может быть, более симпатичнаяdate +"%Y-%m-%d %T"
.date
) для каждой строки журнала, что может быть серьезным недостатком в зависимости от вашей машины и количества журналов. Я бы предпочел использовать,ts
если доступно, см. Ответ @willemСмотрите
ts
изmoreutils
пакета Ubuntu :Или, если
$command
делает автоматическую буферизацию (требуетсяexpect-dev
пакет):источник
Команда date предоставит эту информацию
так что вы можете
это то, что вы хотели?
источник
Вы можете просто отобразить вывод команды в файл журнала. т.е.
Это действительно работает :)
Пример:
источник
Сделать
config.sh
файлКогда вам нужно отправить в файл журнала использования
Лог-файл будет выглядеть
Так будет легко отсортировать по дате
источник
Вы имеете в виду, как:
источник
script.sh
. Для ОП требуется временная метка на строку.Попробуй это
Вызовите эту функцию отметки времени в каждой команде echo:
источник
Принятый ответ https://serverfault.com/a/310104 может быть немного медленным, если нужно обработать много строк, с накладными расходами на запуск
date
процесса, позволяющего в Ubuntu около 50 строк в секунду, и только около 10 -20 в Cygwin.Когда
bash
можно предположить, что более быстрой альтернативой будетprintf
встроенная функция со%(...)T
спецификатором формата. сравнитьисточник
Вы можете заметить, что awk работает быстро,
Но sed работает намного быстрее,
Тем не менее, при ближайшем рассмотрении, набор, кажется, не меняет время,
источник
"s/^/$(date -R) /"
и запускает дату один раз перед sed. Sed передается статическая строка.yes | head -5000000 | while read line; do echo $((SECONDS)); done | uniq -c
который намного медленнее, чем поглазеть.ts
Утилита имеет ту же производительность, что и цикл bash.yes |head -5000000 |perl -ne 'print localtime."\t".$_' |uniq -c
немного медленнее, чем awk.Ниже приведено содержимое моего журнала
часть моего содержимого оболочки, как показано ниже
источник
Этот скрипт выводит вывод в терминал, а также сохраняет в лог-файл.
Образец вывода:
источник
Другой вариант - настроить функцию для вызова каждый раз, когда вы хотите вывести данные в свой код:
Затем каждый раз в своем коде вы хотите отправить его в файл журнала вызова
Очень просто....
источник
Труба "сед":
источник