如何旋转我的Rails 5日志?

我在Ubuntu 14.04上运行Rails 5。 有没有办法旋转我的日志,而不依赖于Linux的logrotate系统? 我有这个设置…

myuser@myapp:~$ cat /etc/logrotate.d/myapp /home/rails/myapp/log/*.log { daily missingok rotate 2 compress delaycompress notifempty copytruncate } 

但是我的日志从不旋转。 看他们有多臃肿

 myuser@myapp:~$ ls -al /home/rails/myapp/log/ total 3958356 drwxr-xr-x 2 rails rails 4096 Jul 3 22:31 . drwxr-xr-x 15 rails rails 4096 Sep 21 17:21 .. -rw-rw-r-- 1 rails rails 0 Jun 22 10:22 development.log -rw-rw-r-- 1 rails rails 14960 Jun 1 22:39 development.log.1 -rw-rw-r-- 1 rails rails 0 Oct 22 2016 .keep -rw-r--r-- 1 rails rails 198362787 Oct 31 16:28 production.log -rw-r--r-- 1 rails rails 8615654 Jul 3 22:31 production.log.1 -rw-r--r-- 1 rails rails 640621243 Jun 29 13:16 production.log.2.gz -rw-rw-r-- 1 rails rails 2856792698 Oct 31 17:12 sidekiq.log -rw-rw-r-- 1 rails rails 348853619 Jul 3 22:31 sidekiq.log.1 -rw-rw-r-- 1 rails rails 0 Jul 3 22:31 test.log -rw-rw-r-- 1 rails rails 54246 Jul 3 22:31 test.log.1 

是否有另一种方法来获取日志旋转或有一种方法来解决我所包含的configuration?

编辑:这是设置的cron脚本

 myuser@myapp:~$ cat /etc/cron.daily/logrotate #!/bin/sh # Clean non existent log file entries from status file cd /var/lib/logrotate test -e status || touch status head -1 status > status.clean sed 's/"//g' status | while read logfile date do [ -e "$logfile" ] && echo "\"$logfile\" $date" done >> status.clean mv status.clean status test -x /usr/sbin/logrotate || exit 0 /usr/sbin/logrotate /etc/logrotate.conf 

编辑:每个评论我试图把这个添加到我的configuration/环境/ production.rb文件…

 config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024) 

但日志变得更大而不旋转。

通过遵循12因子方法( 将日志视为事件流 ),您可以“将”该任务委托给主管。

例如,通过使用不朽 ,它将为您做所有的旋转过程,而不依赖于操作系统。

基本的配置文件( run.yml )可能如下所示:

 cmd: bundle exec unicorn -c unicorn.rb cwd: /arena/app-1 env: DEBUG: 1 ENVIRONMENT: production log: file: /var/log/app-1.log age: 86400 # seconds num: 7 # int size: 1 # MegaBytes timestamp: true # will add timesamp to log 

如果你想分割日志stderr和标准输出这可以使用:

 cmd: bundle exec unicorn -c unicorn.rb cwd: /arena/app-1 env: DEBUG: 1 ENVIRONMENT: production log: file: /var/log/app.log age: 86400 # seconds num: 7 # int size: 1 # MegaBytes stderr: file: /var/log/app-error.log age: 86400 # seconds num: 7 # int size: 1 # MegaBytes timestamp: true # will add timesamp to log 

作为一个侧面说明,从12因子网站 :

十二个因素的应用程序进程不应该守护进程或写入PID文件。 相反,依靠操作系统的进程管理器来管理输出流,响应崩溃的进程,并处理用户启动的重新启动和关闭。

[免责声明:我是不朽的作者] ,其中一个想法的确是覆盖大规模应用程序的自动化,而不需要担心填满磁盘时,如果日志中没有正确旋转除了可以部署(启动/ restart)只需修改一个run.yml文件而不需要root权限即可。