如何更改Rails 3.0的默认日志路径?

Rom*_*ain 10 logging ruby-on-rails ruby-on-rails-3

由于我公司的内部软件部署过程,我必须更改我的铁路应用程序的默认日志路径:基本上我的rails应用程序最终位于只读位置,我需要在"为此制作"目录中编写的日志文件.

使用Rails 2.x,我们在FCGI脚本中添加了一些黑魔法,以便在prod上部署时强制使用.主机:

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

但是,在Rails 2.3(它是一个模块)中,Configuration不再是一个类了,在我看来,不再有任何default_log_path了...

shi*_*ara 8

您只需要定义记录器

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

这个技巧也适用于Rails 2.您可以根据环境定义您真正想要的日志文件.

  • 在Rails 4中,这应该是`config.logger = ActiveSupport :: Logger.new(File.join(ENV ['SOME_ENVIRONMENT_VAR'],"var/output/logs/rails.log"))`(似乎BufferedLogger已被删除) ). (3认同)
  • 实际上Rails3(至少)有一个config.log_path,我使用并完美地工作.但是如果没有你的(实际上非​​常明智的)解决方案我就不会发现:) (2认同)

小智 8

config.log_path设置已被弃用 - 现在推荐的解决方案是:

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

  • 此语法似乎不正确。在配置块中,如果你执行 `config.paths['logfile'] = '...'` 看起来是正确的,但 LogTailer 仍然会抱怨。 (2认同)
  • 对我来说,`config.paths ['log']`就像@aceofspades建议的那样(下面,不是`logfile`)运行正常. (2认同)

ace*_*des 5

从Rails 3.2.3开始,看起来日志路径名也已在中定义Rails::Rack::LogTailer#initialize,并且来自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
Run Code Online (Sandbox Code Playgroud)