有类似log4j
bash 脚本的东西吗?我希望能够根据错误的严重程度以不同的方式处理错误。例如,log4j
允许我区分错误、信息、调试等。有没有办法可以为 bash 做到这一点?
我知道,我可以编写一个函数,将其写入日志,如下例所示:
LOG () {
echo `date` $* >> /var/log/my_log.log
}
但实际上我想知道像 log4j 这样的东西是否与 bash 相关
为了获得以下能力——错误级别等等
答案1
大多数系统都有该logger
实用程序,它知道如何与syslogd
.它允许您设置日志级别(严重性)、设施名称、指定要写入的日志文件、发送到syslogd
远程主机、将消息写入STDERR
以及系统日志。
日志语义与 等工具提供的语义不太一样log4j
,但是通过将facility.level
设置与消息标签相结合,您可以实现非常接近的效果。
例子
笔记:这些示例使用 FreeBSD 版本的logger
.您的系统可能有不同的选项,因此请阅读您的本地文档!
logger -p local3.info -f /var/log/messages -t MY_LOG_TAG "something interesting happened"
/var/log/messages
这将发送要在设施中以严重性info
,登录的消息local3
。它包括一个标记 ( -t MY_LOG_TAG
),该标记包含在每行中。标签对于使用grep
、awk
等提取日志条目非常有用。
logger -h loghost -p mail.crit -s -f /var/log/mail "an unrecoverable error has occurred"
crit
这会将设备中带有严重性的消息发送mail
到远程计算机以loghost
进行登录/var/log/mail
。这-s
会导致消息打印在脚本上STDERR
并发送到日志中。
答案2
有大量有关通过 shell 全局变量记录 shell 脚本的详细信息。我们可以在 shell 脚本中模拟类似的日志记录:http://www.cubicrace.com/2016/03/log-tracing-mechnism-for-shell-scripts.html
这篇文章详细介绍了 INFO、DEBUG、ERROR 等日志级别。跟踪脚本入口、脚本出口、函数入口、函数出口等详细信息。
样本日志:
答案3
您可能想看看我在 GitHub 上的日志记录实现:
https://github.com/codeforester/base/blob/master/lib/stdlib.sh
它支持五个日志级别(ERROR、WARN、INFO、DEBUG 和 VERBOSE)以及多个记录器。