简体   繁体   中英

Log rotation/clearing in Ruby on Rails

How can I setup the automatic cleanup on test.log and development.log in ruby on rails?

Is there a setting to automatically delete dev and test logs on server start and tests run?

The ruby logger is on hand to help you out here - and it has default options for rotation.

Here's what I do:

In environment.rb we define our own logger

new_logger = Logger.new(File.join(RAILS_ROOT, "log", "new_logger_#{RAILS_ENV}.log"), 'daily')
new_logger.formatter = Logger::Formatter.new

This creates our own loggers... with a formatter (so you get timestamps etc), with one per environment, and rotated daily.

Then in the initialization block we ask Rails to use this logger

Rails::Initializer.run do |config|

  config.active_record.logger = new_logger
  config.action_controller.logger = new_logger

  #snip
end

You can obviously see the power here too to have different loggers for active_record and for action_controller - sometimes very useful!

rake log:clear is a rake task that truncates all files that match log/*.log to zero bytes. You could call it in your server start and run tests tasks.

See here in this tutorial: Rotating Rails Log Files , i don't know if it solves your problem, because i don't take care about my log files.

Hpe i'm helping you!

All script/server is, is a ruby script, im sure you could modify it to do something like:

#!/usr/bin/env ruby
require 'fileutils'
FileUtils.rm File.join(File.dirname(__FILE__), log, *.log)
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/server'

在生产环境中,你真的需要SyslogLogger( http://rails-analyzer.rubyforge.org/tools/files/lib/analyzer_tools/syslog_logger_rb.html ),它允许你写入syslogd,creansup,在分布式设置中旋转你的文件。

After experimenting, I found that Rails initializers are loaded at the right point where you can truncate the file using the standard Ruby File class. I have this in config/initializers/truncate_logs_on_server_start.rb :

if MyRailsApp::Application.config.truncate_logs_on_server_start
  # Making an assumption here that we're logging to a file...
  File.open("log/#{ENV["RAILS_ENV"]}.log", "w") do |log_file|
    log_file.puts("Initializer truncate_logs_on_server_start reset the log file")
    log_file.puts
  end
end

You just then need to set MyRailsApp::Application.config.truncate_logs_on_server_start in application.rb and the various environments.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM