web-dev-qa-db-ja.com

ロガーコマンドを使用して複数行のメッセージを記録する方法

複数行のメッセージをシステムロガーに記録したい

echo -e "foo\nbar" | logger

ただし、2つのログとして表示されます。

単一のログとして記録することは可能ですか?

7
Howard

ロガーには、この機能は含まれていません。基本的に行指向です-すべての行は新しいメッセージです。

複数行のログメッセージは、grepなどの標準ユーティリティを使用して対処するのも非常に困難です。到着時間によっては、メッセージが分割されて、関連情報の追跡が困難になる場合もあります。

より良い解決策は、メッセージを単一のメッセージとして記録することです。 @Benjaminが示唆するように、trを使用するか、echo -Enを使用できます。後で表示するために\ nが本当に必要な場合は、trを使用して、\ nをユーティリティが生成しない他の文字に変更してログを書き込み、読み取り時にtrを使用して\ nに戻します。

3
user9517

もちろん、次のように\ nをスペースで置き換えます。

echo -e "foo\nbar" | tr '\ n' '' |ロガー

2

別の方法-「改行」で行を区切る必要があると仮定した場合-最初に一時ファイルに書き込み、次にユーザー

logger -t <title> -f <temp-file> 
0
tonioc

出力を分割...
例:

ip route show |while read line; do logger -t TEST $line; done
0
scottbiker

次のことができます。

MESSAGE="this is my message: \nhello \nnewline \nin logger"
logger "$(printf "$MESSAGE")"
0
sheldonzy