在运行中修改错误和日志消息

时间:2011-03-19 12:02:57

标签: bash shell

我有一种情况,我想将错误和日志消息发送到同一个文件。为了区分错误和日志消息,我附加了这样的日志消息:

文件看起来像这样:

===============log_and_error_msg.txt =========
ERR: This message is an error message
INF: This is a log message 

这样任何对错误消息感兴趣的人都可以grep "ERR" log_and_error_msg.txt

假设我正在执行这样的shell脚本

./shellscript 2>>log_and_error_msg.txt 1>>log_and_error_msg.txt

如何在飞行中为每条消息添加ERR和INF?

4 个答案:

答案 0 :(得分:2)

#!/bin/bash
exec 3> >(sed 's/^/INF: /' >> prepend.log)
exec 4> >(sed 's/^/ERR: /' >> prepend.log)
echo "some information" >&3
echo "an error" >&4
echo "more information" >&3
echo "this goes to the screen"
echo "this goes to stderr, bypassing the log" >&2
echo "another error" >&4
echo "yet more information" >&3
echo "still information" >&3
echo "oops" >&4

答案 1 :(得分:1)

你可以使用sed。在每个管道中插入sed 's/^/TYPE /',将TYPE替换为ERR:INF:

答案 2 :(得分:0)

尝试将stderr重定向到临时文件。

./testscript.sh 2> err.tmp | ( while read line ; do echo 'INFO: ' $line ; done ) ; ( while read line ; do echo 'ERR: ' $line ; done ) <err.tmp

答案 3 :(得分:0)

{ { ./shellscript | sed 's/^/INF: /'; } 2>&1 1>&3 | sed 's/^/ERR: /'; } \
>> log_and_error_message.txt 3>&1