我正在使用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
关于如何将当前使用的租户(数据库)输出到日志文件的每一行的任何想法?
谢谢!
答案 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