Romain
Romain

Reputation: 12809

How to change Rails 3.0's default log path?

I have to change my rail application's default log path because of my company's internal software deployment process: basically my rails app ends up on a read-only location, and I need the log files written in a directory "made for this".

With Rails 2.x we used to add some black magic in our FCGI script to force that in when deployed on prod. hosts:

class Rails::Configuration
   def default_log_path
     File.join(ENV['SOME_ENVIRONMENT_VAR'], "var/output/logs/rails.log")
   end
 end

However, Configuration isn't a class anymore in Rails 2.3 (it's a module), and it appears to me there isn't any default_log_path involved there anymore as well...

Upvotes: 11

Views: 14836

Answers (3)

aceofspades
aceofspades

Reputation: 7586

As of Rails 3.2.3, looks like the log pathname is also defined in Rails::Rack::LogTailer#initialize, and that comes from Rails::Server#log_path.

LOG_PATH = "log/mylog.log"

require 'rails/commands/server'
module Rails
  class Server
    def log_path
      LOG_PATH
    end
  end
end

class Application < Rails::Application
  ...
  config.paths['log'] = LOG_PATH
  ...
end

Upvotes: 6

shingara
shingara

Reputation: 46914

You just need define your logger

config.logger = ActiveSupport::BufferedLogger.new(File.join(ENV['SOME_ENVIRONMENT_VAR'], "var/output/logs/rails.log"))

This trick works with Rails 2 too. And you can define by environment where you really want your log file.

Upvotes: 9

Cameron Yule
Cameron Yule

Reputation: 214

The config.log_path setting has been deprecated - the recommended solution is now:

config.paths.log = "/some/path/#{Rails.env}.log"

Upvotes: 9

Related Questions