使用 apache+passenger+ruby-on-rails+mysql 进行日志轮换的最佳策略是什么?

使用 apache+passenger+ruby-on-rails+mysql 进行日志轮换的最佳策略是什么?

(希望我有适合这个问题的 SE 网站,如果没有,请原谅。)

我有一个使用 Apache+mod_rails(passenger)部署的 Ruby-on-Rails 应用程序。它使用 MySQL 作为数据库后端。我使用它SyslogLogger来将 RoR 日志发送到 syslog,并logrotate通过每日 cron 作业来轮换日志。

我发现,如果在日志轮换期间 RoR 应用程序处于某个操作的中间,它就会挂起。我尝试过输入copytruncate配置logrotate,但似乎这也会影响apache日志(可能是因为 RoR 错误日志转到了文件error.logapache以及 - 可能 - MySQL 日志(可能 - 有时很难准确地关联哪个日志导致崩溃)。

在互联网上搜索出现了一些关于日志轮换的不同解决方案,一个是使用密钥copytruncate,另一个是使用cronolog,但我还没有找到一个可以直接解决我所看到的问题的解决方案。

那么有没有已知的解决方案?在 RoR 应用程序上轮换日志的“正确方法”是什么(使用 apache 和 mod_rails 进行部署)?我应该只copytruncate输入每一个与应用程序有点相关的logrotate配置文件?

答案1

与‘copytruncate’不同,这些行在我的 rails 应用程序的 logrotate 文件中对我有用:

  postrotate
    touch /your-rails-directory/tmp/restart.txt
  endscript

答案2

我不会费心将您的 Rails 应用程序日志发送到 syslog。当让 Rails 写入自己的日志文件时,您是否尝试过 logrotate 配置?

相关内容