cni*_*aou 166 logging ruby-on-rails production-environment
在Ruby on Rails生产应用程序上启用日志轮换的最佳方法是什么?
是通过在托管服务器上使用logrotate还是在从应用程序初始化记录器时有一组选项可用?
ber*_*kes 201
您可以配置rails,以使用系统日志工具.
config/environments/production.rb中的一个示例.
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
Run Code Online (Sandbox Code Playgroud)
这样,您就可以登录到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
}
Run Code Online (Sandbox Code Playgroud)
根据下面的建议,在Rails中建议使用copytruncate
,以避免重新启动Rails应用程序.
编辑:删除"sharedscripts/endscript",因为它们在这里没有使用,并根据评论引起问题.并create 640 root adm
根据评论建议删除.
ami*_*ena 55
如果您使用的是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
}
Run Code Online (Sandbox Code Playgroud)
要么
# Rotate Rails application logs weekly
/path/to/your/rails/applicaton/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
Run Code Online (Sandbox Code Playgroud)
请注意,copytruncate会生成当前日志的备份副本,然后清除日志文件以继续写入.另一种方法是使用create,它将通过重命名当前文件然后创建一个与旧文件同名的新日志文件来执行旋转.我强烈建议您使用copytruncate,除非您知道需要创建.原因是Rails可能仍然指向旧的日志文件,即使其名称已更改,并且可能需要重新启动才能找到新的日志文件.copytruncate通过保持与活动文件相同的文件来避免这种情况.
Fel*_*ger 29
对于Rails 5,这是我必须做的限制日志大小而不是在控制台中更改服务器输出:
根据文档,如果要限制日志文件夹的大小,请将其放在环境文件('development.rb'/'production.rb')中.
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)
Run Code Online (Sandbox Code Playgroud)
有了这个,您的日志文件永远不会超过50Mb.您可以根据自己的喜好更改大小.第二个参数中的"1"表示将保留1个历史日志文件,因此您将拥有最多100Mb的日志 - 当前日志和前一个50Mb的块.
对于Rails 5,如果你想要每日日志轮换,你只需要这个:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
Run Code Online (Sandbox Code Playgroud)
根据文档,您可以使用daily
,weekly
或monthly
。
对于每个日志:Rails 日志、Rpush 日志...您可以在服务的配置文件中像这样使用:
config.log_file = 'log/rpush.log'
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20.megabytes)
Run Code Online (Sandbox Code Playgroud)
意思是:分割后只保存之前的1个日志文件。主日志大小永远不会超过 20 MB。