在屏幕上打印消息并同时发送到syslog

时间:2013-09-02 10:46:36

标签: linux bash logging echo syslog

我正在尝试在我的脚本中实现-s(即无声)选项 - 当给出错误/信息等时,将被发送到syslog,否则在屏幕上打印并发送到{{1 }} 同时。这就是我正在做的事情:

syslog

echo -e "This Is a Test Message\nWell, not really!!" 2>&1 | logger 消息发送到echo(不在屏幕上打印),但不能同时弄清楚如何同时执行这两项操作。我看到人们只谈论使用syslog进行日志记录或者在屏幕上打印时将日志发送到不同的文件,而不是我正在尝试处理的情况。任何帮助或指针将不胜感激。干杯!!

3 个答案:

答案 0 :(得分:4)

如果要将消息发送到syslog和stdout(而不是stderr),也可以这样做:

echo -e "This Is a Test Message\nWell, not really!!" | tee >(exec logger)

有效的方法(如果你正在创建一个函数):

exec 40> >(exec logger)

function log {
    echo -e "$1"
    echo -e "$1" >&40
}

log "something..."

exec 40>&-  ## optionally close it at the end of the script.

每次进行回声时,这都会使您的脚本无法调用外部二进制记录器。

答案 1 :(得分:1)

在这种情况下,只需回显两次相同的消息。你可以这样做:

echo -e "This Is a Test Message\nWell, not really!!" | tee /dev/stderr | logger

但是,它实际上更简单,更有效:

error='This Is a Test Message\nWell, not really!!'
echo -e "$error" >&2
echo -e "$error" | logger

>& 2将输出发送到stderr,而不是stdout。

答案 2 :(得分:0)

你可以这样做:

echo -e "This Is a Test Message\nWell, not really!!" | logger -s

手册页(man logger)声明:

-s     Log the message to standard error, as well as the system log.