Using the ActiveSupport::BroadcastLogger

The ActiveSupport::BroadcastLogger Show archive.org snapshot allows you to log to multiple sinks. You know this behavior from from the rails server command, that both logs to standard out and the log/development.log file.

Here is an example from the ActiveSupport::BroadcastLogger API:

stdout_logger = ActiveSupport::Logger.new(STDOUT)
file_logger = ActiveSupport::Logger.new("development.log")
broadcast = ActiveSupport::BroadcastLogger.new(stdout_logger, file_logger)

broadcast.info("Hello world!") # Writes the log to STDOUT and the development.log file.

Here is an example for Sidekiq:

Sidekiq.configure_client do |config|
  if ENV['RAILS_ENV'] == 'development' || ENV['RAILS_ENV'] == 'test'
    stdout_logger = ActiveSupport::Logger.new(STDOUT)
    file_logger = ActiveSupport::Logger.new("log/sidekiq_#{ENV['RAILS_ENV']}.log")
    broadcast = ActiveSupport::BroadcastLogger.new(stdout_logger, file_logger)
    broadcast.level = Logger::INFO

    config.logger = broadcast
  end
end

Sidekiq.configure_server do |config|
   if ENV['RAILS_ENV'] == 'development' || ENV['RAILS_ENV'] == 'test'
    stdout_logger = ActiveSupport::Logger.new(STDOUT)
    file_logger = ActiveSupport::Logger.new("log/sidekiq_#{ENV['RAILS_ENV']}.log")
    broadcast = ActiveSupport::BroadcastLogger.new(stdout_logger, file_logger)
    broadcast.level = Logger::INFO

    config.logger = broadcast
  end
end

Legacy note

In previous versions of ActiveSupport the code for the examples above would have looked like this.

stdout_logger = ActiveSupport::Logger.new(STDOUT)
file_logger = ActiveSupport::Logger.new("development.log")
broadcast = stdout_logger.extend(ActiveSupport::Logger.broadcast(file_logger))

broadcast.info("Hello world!") # Writes the log to STDOUT and the development.log file.
Emanuel