Обычно регистратор обычно настраивается для каждого сервера (или действительно для каждой среды), в то время как квартира устанавливает арендаторов для каждого запроса - это означает, что на практике это не очень хорошо работает.
Вы можете установить регистратор налюбой точке, назначив Rails.logger
экземпляру регистратора.
Rails.logger = Logger.new(Rails.root.join('log/foo.log'), File::APPEND)
# or for multiple loggers
Rails.logger.extend(Logger.new(Rails.root.join('log/foo.log'), File::APPEND))
Однако не все так просто - вы не можете просто бросить это в ApplicationController
и думать, что все просто как надо - это будет называться поздно, и большинство записей с важными вещаминапример, запрос или любые ошибки, которые всплывают до того, как контроллер попадет в журнал по умолчанию.
Что вы можете сделать, это написать собственный фрагмент middleware , который отключает журнал:
# app/middleware/tenant_logger.rb
class TenantLogger
def initialize app
@app = app
end
def call(env)
file_name = "#{Appartment::Tenant.current}.log"
Rails.logger = Logger.new(Rails.root.join('log', file_name), File::APPEND)
@app.call(env)
end
end
И смонтировать его после «лифта» в стеке промежуточного программного обеспечения:
Rails.application.config.middleware.insert_after Apartment::Elevators::Subdomain, TenantLogger
Однако, поскольку это довольно далеко в стеке промежуточного программного обеспечения, вы все равно пропустите довольно много важныхинформация, записанная промежуточным программным обеспечением, такая как Rails::Rack::Logger
.
Использование тегированного регистратора, как предлагается в руководствах Rails с одним файлом, является гораздо лучшим решением.