I want to log a multiline message into the system logger via the commabnd
echo -e "foo\nbar" | logger
But it appear as 2 logs.
Is it possible to log as a single log?
Logger doesn't contain this functionality it is basically line orientated - every line is a new message.
Multi-line log messages are also a real pain to deal with using standard utilities like grep etc. Depending on their arrival time the messages could also get split making it harder to track down relevant information.
A better solution is to log your messages as a single message. As @Benjamin suggests you can use tr or you could use echo -En. If you really need to have the \n for later display purposes then use tr to change the \n to some other character that your utility will not generate to write the log and when reading use tr to convert it back to a \n.
Sure, just replace \n by space as this :
echo -e "foo\nbar" | tr '\n' ' ' | logger
an alternative - assuming you need to keep the lines separated by 'newline' - would be to write first to a temp file, and then user
logger -t <title> -f <temp-file>
Split the output...
ip route show |while read line; do logger -t TEST $line; done