Answers:
您可以配置滑轨,以使用系统日志工具。
config / environments / production.rb中的示例。
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
这样,您可以登录syslog,并可以使用默认的logrotate工具来旋转日志。
另一个选择是简单地配置logrotate以拾取rails留下的日志。在Ubuntu和Debian上,该文件将位于例如的文件中/etc/logrotate.d/rails_example_com
。
/path/to/rails.example.com/tmp/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
根据下面的建议,建议在Rails中使用copytruncate
,以避免必须重新启动Rails应用程序。
编辑:删除了“共享脚本/结束脚本”,因为此处未使用它们,并且根据注释会导致问题。并create 640 root adm
根据评论建议删除。
logrotate
解决方案,则值得@ amit-saxena回答-建议使用copytruncate
over create
指令。
copytruncate
,create
有没有效果,所以你应该从你的例子大概删除
su your_rails_user your_rails_group
在日志文件的所有者和组(即,Rails / Passenger进程的日志文件的所有者和组)或logrotate(的最新版本?)中添加一行内容。
如果您使用的是logrotate,则可以通过将conf文件放置在/etc/logrotate.d/目录中来选择以下所示的任何一个选项。
# Rotate Rails application logs based on file size
# Rotate log if file greater than 20 MB
/path/to/your/rails/applicaton/log/*.log {
size=20M
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
要么
# Rotate Rails application logs weekly
/path/to/your/rails/applicaton/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
请注意,copytruncate会创建当前日志的备份副本,然后清除日志文件以继续写入。另一种选择是使用create,它将通过重命名当前文件然后创建一个与旧文件同名的新日志文件来执行轮换。我强烈建议您使用copytruncate,除非您知道需要创建。原因是即使名称已更改,Rails仍会继续指向旧的日志文件,并且它们可能需要重新启动才能找到新的日志文件。copytruncate通过保持与活动文件相同的文件来避免这种情况。
logrotate --force $CONFIG_FILE
,您可以通过指定配置文件位置来运行以手动运行它。
对于Rails 5,这是我必须做的,以限制日志大小并且不更改控制台中的服务器输出:
根据文档,如果要限制日志文件夹的大小,请将其放入环境文件(“ development.rb” /“ production.rb”)中。
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)
这样,您的日志文件将永远不会超过50Mb。您可以根据自己的喜好更改大小。第二个参数中的“ 1”表示将保留1个历史日志文件,因此您将拥有多达100Mb的日志-当前日志和前一个50Mb块。
config.paths['log'].first
我把Rails.root.join('log', "#{Rails.env}.log")
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
50.megabytes
与相同50 * 1024 * 1024
,但更容易理解。有关更多详细信息,请参见ActiveSupport核心扩展。
Rails.application.config.paths['log'].first
恰好返回此文件
对于Rails 5,如果要每天轮换日志,则只需要这样做:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
根据该文件,您可以使用daily
,weekly
或monthly
。
启用在我的environments / production.rb文件中使用rails logglier将日志发送到loggly。rails版本是4.1.0
RailsApplication::Application.configure do
require 'logglier'
config.logger = Logglier.new(<https://logs-01.loggly.com/inputs/inputkey>)
log.info("hello from logglier")
end