Fedora пытается иметь в наличии 3 ядра при обновлении (для редкого случая захватывающих фейерверков на начальной загрузке).
tail -f ...your-files |
awk '/^==> / {a=substr($0, 5, length-8); next}
{print a":"$0}'
\ Спасибо {don_cristti}
что-то с Xargs
и SED
может работать:
$ xargs -I% -P0 sh -c "tail -f % | sed s/^/%:/g" <<EOT
one.log
two.log
EOT
Если хвост
не является обязательным, вы можете использовать GREP
для достижения этого:
grep "" *.log
Это будет распечатать имя файла в качестве префикса каждой выходной линии.
Выходные разрывы, если *. Журнал
расширяется только к одному файлу. В связи с этим:
grep '' /dev/null *.log
Моя идея будет создать один файл с объединенными журналами из нескольких файлов, подобных кому-то предложенному здесь и Prepend имена файлов:
$ tail -f /var/log/syslog | sed -u -E 's,(^.+$),/var/log/syslog: \1,g' >> /tmp/LOG &&
$ tail -f /var/log/Xorg.0.log | sed -u -E 's,(^.+$),/var/log/Xorg.0.log: \1,g' >> /tmp/LOG &&
$ tail -f /tmp/LOG
GNU Parallel имеет набор хороших опций, которые упрощают выполнение таких действий:
parallel --tagstring "{}:" --line-buffer tail -f {} ::: one.log two.log
Результат будет be:
one.log: contents of one.log here... one.log: contents of one.log here... two.log: contents of two.log here... two.log: contents of two.log here...
- tagstring = str
помечает каждую строку вывода строкой str . Из справочной страницы parallel
: --tagstring str Tag lines with a string. Each output line will be prepended with str and TAB (\t). str can contain replacement strings such as {}. --tagstring is ignored when using -u, --onall, and --nonall.
Все вхождения {}
будут заменены аргументами parallel, которые в данном случае являются именами файлов журнала; то есть one.log
и two.log
(все аргументы после :::
).
Параметр - строчный буфер
необходим, потому что вывод команды (например, tail -f one.log
или tail -f two.log
]) будет напечатан, если эта команда будет завершена. Так как tail -f
будет ждать роста файла, необходимо распечатать вывод по строкам, что делает - строковый буфер
. Снова из параллельной
справочной страницы :
--line-buffer (alpha testing) Buffer output on line basis. --group will keep the output together for a whole job. --ungroup allows output to mixup with half a line coming from one job and half a line coming from another job. --line-buffer fits between these two: GNU parallel will print a full line, but will allow for mixing lines of different jobs.