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

Posted

技术标签:

【中文标题】如何从 bash 脚本将消息记录到特定路径中的日志文件【英文标题】:How to log messages to a log file in a specific path from a bash script 【发布时间】:2012-09-25 18:19:45 【问题描述】:

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

一个简单的实现应该是这样的命令:

echo My message >>/my/custom/path/to/my_script.log

但这可能有很多缺点(例如没有日志轮换)。 我可以使用“logger”命令,但据我所知,它不支持自定义路径中的日志,而且如果您有很多可以使用自定义日志文件的 bash 脚本,那么配置起来也不容易。

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

【问题讨论】:

logger 只是将数据发送到系统日志。您的系统日志配置可以处理将其拆分为您选择的日志文件。 Syslog 不会轮换日志,这通常由 logrotate 完成,可以配置为在任何文件上使用。 我想知道是否存在一个解决方案,您可以运行类似“simply_log -f ~/log/foo.log My message”之类的东西,它将消息记录到该文件并在必要时轮换该日志文件。 (即类似于现代脚本语言中记录命令的行为)。 IMO 最好使用系统范围的 logrotate 程序,除非您仅限于服务器上的用户帐户。尤其是当最受欢迎的日志库之一有 catastrophic bugs 那么,如果您的 ~/bin/ 目录中有数十个个人自定义脚本可以真正使用一些日志记录,那么最好将其记录到 syslog 中? 这真的取决于他们在做什么。您可以将日期附加到日志文件名,而不必担心轮换。 【参考方案1】:

您可以通过这种方式简单地将文本从 bash 脚本附加到日志文件:

echo "My message" >> /my/custom/path/to/my_script.log

旋转由 logrotate 处理,您只需将设置添加到 /etc/logrotate.conf 中的 .conf 即可。该配置非常易于解释,手册页也很有帮助,但简而言之,如果您想每周轮换并以压缩格式保留 4 周的日志并在轮换最后一个时创建一个新的空日志,您只需放入.conf:

/my/custom/path/to/my_script.log 
    rotate 4
    weekly
    create
    compress
    endscript

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

【讨论】:

以上是关于如何从 bash 脚本将消息记录到特定路径中的日志文件的主要内容,如果未能解决你的问题,请参考以下文章

从 bash 脚本本身将 stdout 的副本重定向到日志文件

如何使用bash脚本从csv文件中读取特定的整数?

将启动脚本记录到gcp中的单独文件中

每当有人尝试从 Python 中的特定文件夹复制任何文件时如何记录日志

如何将rsyslog消息重定向到其他路径而不是/ var / log

如何使用 Bash 脚本中的密码运行 sftp 命令?