how to delete rails log file after certain size

前端 未结 5 1143
礼貌的吻别
礼貌的吻别 2020-12-28 19:15

I have a daemon that runs constantly which fills up the log file(development.log or production.log) pretty quickly. What is the best way to delete the log file after certain

相关标签:
5条回答
  • 2020-12-28 20:00

    I prefer a monthly log file in my production.rb file

    config.logger = Logger.new(config.log_path, 'monthly')
    
    0 讨论(0)
  • 2020-12-28 20:05

    The best way is to set up log rotation, but how you do this is very platform dependent, so you should add a comment about what you're using, both for development and production.

    For our apps running on Linux, we have a file /etc/logrotate.d/appname for each app, that looks something like this:

    /path/to/rails_root_for_app/log/production.log {
        daily
        missingok
        rotate 7
        compress
        delaycompress
        notifempty
        create 640 capistrano capistrano
    }
    

    This will move the log into a new file once a day, keeping a compressed backup file for each of the last 7 days.

    If you just want to empty the file without keeping any of the data in it while the daemon is running, simply do this from a shell:

    > /path/to/rails_root_for_app/log/development.log
    

    This will truncate the file to 0 bytes length.

    0 讨论(0)
  • 2020-12-28 20:09

    Or you can delegate logging to syslog

    0 讨论(0)
  • 2020-12-28 20:10
    config.logger = Logger.new(config.log_path, 50, 1.megabyte)
    

    but beware that multiple mongrels can have issues with this.

    0 讨论(0)
  • 2020-12-28 20:18

    Or even better, if all your environments are on either Mac or Linux, and have /usr/sbin/rotatelogs, just use that. It's much more flexible, and doesn't have the data loss issue that logrotate has (even if you use copytruncate).

    Add this inside config/application.rb (or just config/environments/production.rb if you only want rotation in prod):

    log_pipe = IO.popen("/usr/sbin/rotatelogs #{Rails.root}/log/#{Rails.env}.%Y%m%d.log 86400", 'a')
    config.logger = Logger.new(log_pipe)
    

    (From this blog post)

    0 讨论(0)
提交回复
热议问题