Bash Shell脚本 - 写入自定义日志文件

cof*_*tor 37 bash shell logging

在Linux中,我知道如何/var/log/messages在我创建的简单shell脚本中向文件写一条简单的消息:

#!/bin/bash
logger "have fun!"
Run Code Online (Sandbox Code Playgroud)

我想停止将消息抛入默认/var/log/messages文件,并创建自己的.

我试过这个:

#!/bin/bash
logger "have more fun" > /var/log/mycustomlog
Run Code Online (Sandbox Code Playgroud)

它仍然记录到/var/log/messages.它创造了/var/log/mycustomlog它,但它是空的.

有人看到我错过了吗?

Ans*_*ers 35

logger记录到syslog工具.如果要将消息转到特定文件,则必须相应地修改syslog配置.你可以添加这样一行:

local7.*   -/var/log/mycustomlog
Run Code Online (Sandbox Code Playgroud)

并重新启动syslog.然后你可以像这样记录:

logger -p local7.info "information message"
logger -p local7.err "error message"
Run Code Online (Sandbox Code Playgroud)

并且消息将显示在具有正确日志级别的所需日志文件中.

无需更改syslog配置,您可以logger像这样使用:

logger -s "foo bar" 2>> /var/log/mycustomlog
Run Code Online (Sandbox Code Playgroud)

这将指示logger将消息打印到STDERR(除了将其记录到syslog之外),因此您可以将STDERR重定向到文件.但是,它完全没有意义,因为消息已经通过syslog记录(具有默认优先级user.notice).

  • 对于在上一个示例中对字符串后使用数字 2 感到困惑的其他人,1 重定向标准输出,2 重定向标准错误。此处提供更多信息:http://www.tldp.org/LDP/abs/html/io-redirection.html (3认同)

cof*_*tor 31

@chepner提出了一个logger专门用于记录消息的好点.

我需要提一下@Thomas Haratyk只是询问我为什么不简单地使用echo.

当时,我不知道回声,因为我正在学习shell-scripting,但他是对的.

我现在的简单解决方案就是:

#!/bin/bash
echo "This logs to where I want, but using echo" > /var/log/mycustomlog
Run Code Online (Sandbox Code Playgroud)

上面的示例将覆盖>之后的文件

所以,我可以用这个附加到该文件:

#!/bin/bash
echo "I will just append to my custom log file" >> /var/log/customlog
Run Code Online (Sandbox Code Playgroud)

多谢你们!

  • 另一方面,我个人倾向于保留我的个人登录信息/var/log/,但我确信还有其他好的想法.由于我没有创建守护进程,/var/log/可能不是我的自定义日志文件的最佳位置.(只是说)

  • @Ansgar苦苦挣扎,不要做出反应. (6认同)
  • `/ var/log`绝对是几乎任何类型日志的最佳位置. (3认同)
  • 我同意这是一个很好的方法,但是日志文件会不断增长,并且没有归档或删除旧日志的机制。如果您经常登录,那么这可能会占用大量存储空间。 (2认同)

Piy*_*dia 6

通过shell的全局变量来记录shell脚本有很多细节.我们可以在shell脚本中模拟类似的日志记录:http ://www.cubicrace.com/2016/03/efficient-logging-mechnism-in-shell.html这篇文章详细介绍了INFO,DEBUG等日志级别的介绍.错误.跟踪脚本输入,脚本退出,功能输入,功能退出等详细信息.

样本日志: 在此输入图像描述