3

通常、私のbashスクリプトでは、これを行うのに慣れていますsome_command >> log.log。これは正常に機能しますが、時間やコマンド名などのデータを追加するにはどうすればよいですか?

私の目標は、このようなログを作成することです

2012-01-01 00:00:01 [some_command] => some command output...
2012-01-01 00:01:01 [other_command] => other command output...

プロセスは、実行とファイルへの書き込みを同時に行う必要があります。

私の場合、William Pursellが指摘した最終的な解決策は、次のようになります。

some_command 2>&1 | perl -ne '$|=1; print localtime . ": [somme_command] $_"' >> /log.log &

また、プログラムをバックグラウンドに保つために、とをファイルにリダイレクトし、最後に2>&1をリダイレクトするように追加しました。STDOUTSTDERR&

ありがとうございました!

4

5 に答える 5

3

sedを使用した別の解決策は次のとおりです。

some_command 2>&1 | sed "s/^/`date '+%Y-%m-%d %H:%M:%S'`: [some_command] /" >> log.log &

行頭の「文字」(^)を置き換えることで機能します。Perlに依存したくない場合に役立つかもしれません。

于 2013-05-31T07:36:41.913 に答える
2

コメントを考えると、複数のプロセスが同時にファイルに書き込み、個々の行にタイムスタンプを付ける必要があるようです。このようなもので十分かもしれません:

some_cmd | perl -ne '$|=1; print localtime . ": [some_cmd] $_"' >> logfile

日付の形式をマッサージしたい場合は、POSIX::strftimeを使用してください

some_cmd | perl -MPOSIX -ne 'BEGIN{ $|=1 }
   print strftime( "%Y-%m-%d %H:%M:%S", localtime ) . " [some_cmd] $_"' >> logfile
于 2012-05-31T18:21:20.513 に答える
1

このようなもの:

(echo -n $(date); echo  -n " ls => ";  ls) >> /tmp/log

ただし、コマンド出力は複数行であり、上記の形式にはなりません。その場合、出力の改行をtrやsedなどのコマンドを使用して他の文字に置き換えることができます。

于 2012-05-31T18:17:06.253 に答える
1

Ubuntuの場合:

sudo apt-get install moreutils
echo "cat" | ts
Mar 26 09:43:00 cat
于 2014-03-26T08:43:37.557 に答える
0

1つのアプローチは、logger(1)を使用することです。

もう1つは次のようなものかもしれません:

stamp () {
  ( echo -n "`date +%T` "
    "$@" ) >> logfile
}

stamp echo how now brown cow
于 2012-05-31T18:19:41.180 に答える