Как добавить метку времени в перенаправление STDERR - PullRequest
33 голосов
/ 02 октября 2009

В bash / ksh мы можем добавить метку времени к перенаправлению STDERR?

например. myscript.sh 2> error.log

Я хочу получить метку времени, записанную в журнале.

Ответы [ 13 ]

0 голосов
/ 27 июня 2012

Думаю, я бы добавил свои 2 цента стоимостью ..

#!/bin/sh

timestamp(){
  name=$(printf "$1%*s" `expr 15 - ${#1}`)
  awk "{ print strftime(\"%b %d %H:%M:%S\"), \"- $name -\", $$, \"- INFO -\", \$0; fflush() }";
}

echo "hi" | timestamp "process name" >> /tmp/proccess.log

printf "$ 1% * s" `expr 15 - $ {# 1}`
Разбивает имя так, чтобы оно выглядело хорошо, где 15 - максимально допустимое пространство, увеличьте при желании

выходы >> Дата - Имя процесса - Идентификатор процесса - ИНФО - Сообщение

Jun 27 13:57:20 - process name     - 18866 - INFO - hi
0 голосов
/ 22 апреля 2011

Эта вещь: nohup myscript.sh 2>> (во время чтения строки; сделайте эхо "$ (date): $ {line}"; done> mystd.err) </ dev / null & </p>

Работает как таковой, но когда я выхожу и снова захожу на сервер, он не работает. то есть mystd.err прекратит заполняться потоком stderr, даже если мой процесс (здесь myscript.sh) все еще выполняется.

Кто-нибудь знает, как вернуть потерянный stderr в файл mystd.err обратно?

0 голосов
/ 03 февраля 2010
#!/bin/bash

DEBUG=1

LOG=$HOME/script_${0##*/}_$(date +%Y.%m.%d-%H.%M.%S-%N).log
ERROR=$HOME/error.log

exec 2> $ERROR
exec 1> >(tee -ai $LOG)

if [ $DEBUG = 0 ] ; then
    exec 4> >(xargs -i echo -e "[ debug ] {}")
else
    exec 4> /dev/null
fi

# test
echo " debug sth " >&4
echo " log sth normal "
type -f this_is_error
echo " errot sth ..." >&2
echo " finish ..." >&2>&4
# close descriptor 4
exec 4>&-
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...