Rails日志仅输出控制台不写入环境日志文件问题求助
Rails 6.1.4.4 + Ruby 2.7.2 日志仅输出控制台不写入文件的排查方案
排查步骤与修复方案
检查配置加载顺序
确认application.rb中是否全局设置了config.logger = Logger.new(STDOUT),该配置会覆盖环境文件(development.rb/qa.rb)中的日志设置。Rails默认先加载application.rb再加载环境配置,若有自定义加载逻辑需排查优先级。修正日志初始化配置
Rails 6.1直接赋值config.logger可能与默认的日志缓冲、格式化配置冲突,改用以下方式在环境配置文件中初始化:config.logger = ActiveSupport::Logger.new( File.join(Rails.root, 'log', "#{Rails.env}.log"), level: :debug, formatter: config.log_formatter ) # 关闭默认的控制台输出,确保日志写入文件 config.log_to_stdout = false验证日志路径与权限
- 确保
log目录及日志文件的读写权限正确,运行服务器的用户需拥有读写权限:chmod -R 755 log/ chown -R [你的运行用户] log/ - 在Rails控制台中打印日志路径,确认路径是否正确:
puts Rails.root puts File.join(Rails.root, 'log', "#{Rails.env}.log")
- 确保
排查Spring预加载器干扰
Rails 6.1搭配Spring预加载器时,可能出现日志配置不生效的情况,尝试关闭Spring启动服务器:DISABLE_SPRING=1 rails s验证日志对象输出目标
在Rails控制台中检查当前日志对象的输出目标:Rails.logger.instance_variable_get(:@logdev).dev若输出为
#<IO:<STDOUT>>,说明日志仍指向控制台,需重新检查配置;若为文件路径,则配置已生效。
内容的提问来源于stack exchange,提问作者VINAY VKK
相关产品推荐
相关产品推荐

