Active Support Broadcast Logger

The Broadcast logger is a logger used to write messages to multiple IO. It is commonly used in development to display messages on STDOUT and also write them to a file (development.log). With the Broadcast logger, you can broadcast your logs to a unlimited number of sinks.

The BroadcastLogger acts as a standard logger and all methods you are used to are available. However, all the methods on this logger will propagate and be delegated to the other loggers that are part of the broadcast.

Broadcasting your logs.

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

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

Add a logger to the broadcast.

stdout_logger = Logger.new(STDOUT)
broadcast = BroadcastLogger.new(stdout_logger)
file_logger   = Logger.new("development.log")
broadcast.broadcast_to(file_logger)

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

Modifying the log level for all broadcasted loggers.

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

broadcast.level = Logger::FATAL # Modify the log level for the whole broadcast.

Stop broadcasting log to a sink.

stdout_logger = Logger.new(STDOUT)
file_logger   = Logger.new("development.log")
broadcast = BroadcastLogger.new(stdout_logger, file_logger)
broadcast.info("Hello world!") # Writes the log to STDOUT and the development.log file.

broadcast.stop_broadcasting_to(file_logger)
broadcast.info("Hello world!") # Writes the log *only* to STDOUT.

At least one sink has to be part of the broadcast. Otherwise, your logs will not be written anywhere. For instance:

broadcast = BroadcastLogger.new
broadcast.info("Hello world") # The log message will appear nowhere.

Methods

Included Modules

Attributes

[R] broadcasts

Returns all the logger that are part of this broadcast.

[R] formatter
[RW] progname

Class Public methods

new(*loggers)

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 62
    def initialize(*loggers)
      @broadcasts = []
      @progname = "Broadcast"

      broadcast_to(*loggers)
    end
🔎 See on GitHub

Instance Public methods

<<(message)

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 92
    def <<(message)
      dispatch { |logger| logger.<<(message) }
    end
🔎 See on GitHub

add(*args, &block)

Also aliased as: log
📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 96
    def add(*args, &block)
      dispatch { |logger| logger.add(*args, &block) }
    end
🔎 See on GitHub

broadcast_to(*loggers)

Add logger(s) to the broadcast.

broadcast_logger = ActiveSupport::BroadcastLogger.new
broadcast_logger.broadcast_to(Logger.new(STDOUT), Logger.new(STDERR))
📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 73
    def broadcast_to(*loggers)
      @broadcasts.concat(loggers)
    end
🔎 See on GitHub

close()

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 142
    def close
      dispatch { |logger| logger.close }
    end
🔎 See on GitHub

debug(*args, &block)

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 101
    def debug(*args, &block)
      dispatch { |logger| logger.debug(*args, &block) }
    end
🔎 See on GitHub

debug!()

Sets the log level to Logger::DEBUG for the whole broadcast.

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 153
    def debug!
      dispatch { |logger| logger.debug! }
    end
🔎 See on GitHub

debug?()

True if the log level allows entries with severity Logger::DEBUG to be written to at least one broadcast. False otherwise.

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 148
    def debug?
      @broadcasts.any? { |logger| logger.debug? }
    end
🔎 See on GitHub

error(*args, &block)

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 113
    def error(*args, &block)
      dispatch { |logger| logger.error(*args, &block) }
    end
🔎 See on GitHub

error!()

Sets the log level to Logger::ERROR for the whole broadcast.

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 186
    def error!
      dispatch { |logger| logger.error! }
    end
🔎 See on GitHub

error?()

True if the log level allows entries with severity Logger::ERROR to be written to at least one broadcast. False otherwise.

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 181
    def error?
      @broadcasts.any? { |logger| logger.error? }
    end
🔎 See on GitHub

fatal(*args, &block)

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 117
    def fatal(*args, &block)
      dispatch { |logger| logger.fatal(*args, &block) }
    end
🔎 See on GitHub

fatal!()

Sets the log level to Logger::FATAL for the whole broadcast.

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 197
    def fatal!
      dispatch { |logger| logger.fatal! }
    end
🔎 See on GitHub

fatal?()

True if the log level allows entries with severity Logger::FATAL to be written to at least one broadcast. False otherwise.

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 192
    def fatal?
      @broadcasts.any? { |logger| logger.fatal? }
    end
🔎 See on GitHub

formatter=(formatter)

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 125
    def formatter=(formatter)
      dispatch { |logger| logger.formatter = formatter }

      @formatter = formatter
    end
🔎 See on GitHub

info(*args, &block)

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 105
    def info(*args, &block)
      dispatch { |logger| logger.info(*args, &block) }
    end
🔎 See on GitHub

info!()

Sets the log level to Logger::INFO for the whole broadcast.

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 164
    def info!
      dispatch { |logger| logger.info! }
    end
🔎 See on GitHub

info?()

True if the log level allows entries with severity Logger::INFO to be written to at least one broadcast. False otherwise.

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 159
    def info?
      @broadcasts.any? { |logger| logger.info? }
    end
🔎 See on GitHub

level()

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 88
    def level
      @broadcasts.map(&:level).min
    end
🔎 See on GitHub

level=(level)

Also aliased as: sev_threshold=
📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 131
    def level=(level)
      dispatch { |logger| logger.level = level }
    end
🔎 See on GitHub

local_level=(level)

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 136
    def local_level=(level)
      dispatch do |logger|
        logger.local_level = level if logger.respond_to?(:local_level=)
      end
    end
🔎 See on GitHub

log(*args, &block)

Alias for: add

sev_threshold=(level)

Alias for: level=

stop_broadcasting_to(logger)

Remove a logger from the broadcast. When a logger is removed, messages sent to the broadcast will no longer be written to its sink.

sink = Logger.new(STDOUT)
broadcast_logger = ActiveSupport::BroadcastLogger.new

broadcast_logger.stop_broadcasting_to(sink)
📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 84
    def stop_broadcasting_to(logger)
      @broadcasts.delete(logger)
    end
🔎 See on GitHub

unknown(*args, &block)

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 121
    def unknown(*args, &block)
      dispatch { |logger| logger.unknown(*args, &block) }
    end
🔎 See on GitHub

warn(*args, &block)

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 109
    def warn(*args, &block)
      dispatch { |logger| logger.warn(*args, &block) }
    end
🔎 See on GitHub

warn!()

Sets the log level to Logger::WARN for the whole broadcast.

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 175
    def warn!
      dispatch { |logger| logger.warn! }
    end
🔎 See on GitHub

warn?()

True if the log level allows entries with severity Logger::WARN to be written to at least one broadcast. False otherwise.

📝 Source code
# File activesupport/lib/active_support/broadcast_logger.rb, line 170
    def warn?
      @broadcasts.any? { |logger| logger.warn? }
    end
🔎 See on GitHub