複数行のメッセージをシステムロガーに記録したい
echo -e "foo\nbar" | logger
ただし、2つのログとして表示されます。
単一のログとして記録することは可能ですか?
ロガーには、この機能は含まれていません。基本的に行指向です-すべての行は新しいメッセージです。
複数行のログメッセージは、grepなどの標準ユーティリティを使用して対処するのも非常に困難です。到着時間によっては、メッセージが分割されて、関連情報の追跡が困難になる場合もあります。
より良い解決策は、メッセージを単一のメッセージとして記録することです。 @Benjaminが示唆するように、trを使用するか、echo -Enを使用できます。後で表示するために\ nが本当に必要な場合は、trを使用して、\ nをユーティリティが生成しない他の文字に変更してログを書き込み、読み取り時にtrを使用して\ nに戻します。
もちろん、次のように\ nをスペースで置き換えます。
echo -e "foo\nbar" | tr '\ n' '' |ロガー
別の方法-「改行」で行を区切る必要があると仮定した場合-最初に一時ファイルに書き込み、次にユーザー
logger -t <title> -f <temp-file>
出力を分割...
例:
ip route show |while read line; do logger -t TEST $line; done
次のことができます。
MESSAGE="this is my message: \nhello \nnewline \nin logger"
logger "$(printf "$MESSAGE")"