我想通过命令将多行消息记录到系统记录器中
echo -e "foo\nbar" | logger
但它显示为 2 个日志。
是否可以作为单一日志进行记录?
答案1
记录器不包含此功能,它基本上是面向行的 - 每一行都是一条新消息。
使用 grep 等标准实用程序来处理多行日志消息也非常麻烦。根据消息到达的时间,消息还可能会被分割,从而使得追踪相关信息变得更加困难。
更好的解决方案是将您的消息记录为一条消息。正如@Benjamin 建议的那样,您可以使用 tr 或 echo -En。如果您确实需要 \n 以便以后显示,则使用 tr 将 \n 更改为您的实用程序不会生成以写入日志的其他字符,并在读取时使用 tr 将其转换回 \n。
答案2
当然,只需用空格替换 \n,如下所示:
echo -e “foo\nbar” | tr'\n'''| 记录器
答案3
另一种选择 - 假设你需要保持行与行之间用“换行符”分隔 - 是先写入临时文件,然后用户
logger -t <title> -f <temp-file>
答案4
您可以执行以下操作:
MESSAGE="this is my message: \nhello \nnewline \nin logger"
logger "$(printf "$MESSAGE")"