如何使用bash脚本将消息记录到特定路径中的日志文件中

Eri*_*rik 1 bash logging syslog

如何将消息从bash脚本记录到特定路径中的日志文件?

一个天真的实现将是如下命令:

echo My message >>/my/custom/path/to/my_script.log
Run Code Online (Sandbox Code Playgroud)

但这可能有许多缺点(例如没有日志轮换).我可以使用'logger'命令,但据我所知,它不支持自定义路径中的日志,如果你有很多可以使用自定义日志文件的bash脚本,则不容易配置.

在像Ruby这样的脚本语言中,这一切都非常简单:https://github.com/rudionrails/yell/wiki/101-the-datefile-adapter 我也可以根据这个ruby库创建自己的logger命令并从中调用它我的bash脚本,但我想已经有一个众所周知的解决方案,为shell脚本提供类似的行为?

Pet*_*ter 5

您可以通过以下方式简单地将文本附加到bash脚本的日志文件中:

echo "My message" >> /my/custom/path/to/my_script.log
Run Code Online (Sandbox Code Playgroud)

旋转由logrotate处理,您只需将设置添加到/etc/logrotate.conf中的.conf即可.配置是非常自我解释的,手册页也非常有用,但简而言之,如果你想每周轮换并以压缩格式保存4周的日志并创建一个新的空日志,因为它在最后一个旋转,你只需要放入.conf:

/my/custom/path/to/my_script.log {
    rotate 4
    weekly
    create
    compress
    endscript
}
Run Code Online (Sandbox Code Playgroud)

您还可以在手册页(man logrotate)中查看许多其他选项,例如通过电子邮件发送日志文件,在旋转时执行命令,在文件达到特定大小时旋转等等.