如何从 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 的副本重定向到日志文件
每当有人尝试从 Python 中的特定文件夹复制任何文件时如何记录日志