Apartment gem-将当前数据库添加到所有服务器日志

时间:2018-10-15 14:35:22

标签: ruby-on-rails database server apartment-gem

我正在使用Apartment gem切换用于多租户Rails应用程序的租户(数据库)。

在服务器日志中,我想输出日志文件中每一行所使用的当前租户(数据库)。

当我执行rails s时,服务器实际上不会以初始化程序目录中的以下代码启动。服务器只是挂起...太奇怪了。没有错误消息,没有正在运行的服务器。如果我将#{Apartment::Tenant.current}取出,一切都很好...但是...我真的很想知道日志文件中的当前租户(数据库)。

/initializers/log_formatting.rb:

class ActiveSupport::Logger::SimpleFormatter 
  def call(severity, time, progname, msg)
    "#{Apartment::Tenant.current} #{msg.strip} (pid:#{$$})\n"
  end
end

关于如何将当前使用的租户(数据库)输出到日志文件的每一行的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:2)

我建议您使用log_tags。 来自rails documentation

  

config.log_tags接受以下列表:请求对象响应的方法,接受请求对象的Proc或响应to_s的对象。这使得使用调试信息(如子域和请求ID)标记日志行变得很容易-两者都对调试多用户生产应用程序很有帮助。

您可以根据需要在application.rb或production.rb中添加此配置。

例如:config.log_tags = [ :subdomain, :request_id, lambda { |request| request.headers["tenant_name"] } ]

注意:如果要在开发环境中添加它,并且您正在your_subdomain.localhost:3000上运行,则子域将不存在,因为localhost不支持子域。有一些变通办法,例如修改/ etc / hosts文件,但我不建议这样做。更清洁的解决方案是使用your_subdomain.lvh.me:3000