class ActiveSupport::BroadcastLogger
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.
If you are adding a custom logger with custom methods to the broadcast, the ‘BroadcastLogger` will proxy them and return the raw value, or an array of raw values, depending on how many loggers in the broadcasts responded to the method:
class MyLogger < ::Logger
def loggable?
true
end
end
logger = BroadcastLogger.new
logger.loggable? # => A NoMethodError exception is raised because no loggers in the broadcasts could respond.
logger.broadcast_to(MyLogger.new(STDOUT))
logger.loggable? # => true
logger.broadcast_to(MyLogger.new(STDOUT))
puts logger.broadcasts # => [MyLogger, MyLogger]
logger.loggable? # [true, true]
Inherits From
-
module
ActiveSupport::
LoggerSilence
Attributes
[R] | broadcasts |
Returns all the logger that are part of this broadcast. |
[R] | formatter |
|
[RW] | progname |
Public class methods
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 82
def initialize(*loggers)
@broadcasts = []
@progname = "Broadcast"
broadcast_to(*loggers)
end
Public instance methods
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 112
def <<(message)
dispatch { |logger| logger.<<(message) }
end
Also aliased as:
log
.
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 116
def add(*args, &block)
dispatch { |logger| logger.add(*args, &block) }
end
Add logger(s) to the broadcast.
broadcast_logger = ActiveSupport::BroadcastLogger.new
broadcast_logger.broadcast_to(Logger.new(STDOUT), Logger.new(STDERR))
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 93
def broadcast_to(*loggers)
@broadcasts.concat(loggers)
end
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 162
def close
dispatch { |logger| logger.close }
end
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 121
def debug(*args, &block)
dispatch { |logger| logger.debug(*args, &block) }
end
Sets the log level to Logger::DEBUG for the whole broadcast.
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 173
def debug!
dispatch { |logger| logger.debug! }
end
True
if the log level allows entries with severity Logger::DEBUG to be written to at least one broadcast. False
otherwise.
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 168
def debug?
@broadcasts.any? { |logger| logger.debug? }
end
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 133
def error(*args, &block)
dispatch { |logger| logger.error(*args, &block) }
end
Sets the log level to Logger::ERROR for the whole broadcast.
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 206
def error!
dispatch { |logger| logger.error! }
end
True
if the log level allows entries with severity Logger::ERROR to be written to at least one broadcast. False
otherwise.
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 201
def error?
@broadcasts.any? { |logger| logger.error? }
end
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 137
def fatal(*args, &block)
dispatch { |logger| logger.fatal(*args, &block) }
end
Sets the log level to Logger::FATAL for the whole broadcast.
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 217
def fatal!
dispatch { |logger| logger.fatal! }
end
True
if the log level allows entries with severity Logger::FATAL to be written to at least one broadcast. False
otherwise.
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 212
def fatal?
@broadcasts.any? { |logger| logger.fatal? }
end
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 145
def formatter=(formatter)
dispatch { |logger| logger.formatter = formatter }
@formatter = formatter
end
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 125
def info(*args, &block)
dispatch { |logger| logger.info(*args, &block) }
end
Sets the log level to Logger::INFO for the whole broadcast.
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 184
def info!
dispatch { |logger| logger.info! }
end
True
if the log level allows entries with severity Logger::INFO to be written to at least one broadcast. False
otherwise.
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 179
def info?
@broadcasts.any? { |logger| logger.info? }
end
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 221
def initialize_copy(other)
@broadcasts = []
@progname = other.progname.dup
@formatter = other.formatter.dup
broadcast_to(*other.broadcasts.map(&:dup))
end
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 108
def level
@broadcasts.map(&:level).min
end
Also aliased as:
sev_threshold=
.
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 151
def level=(level)
dispatch { |logger| logger.level = level }
end
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 156
def local_level=(level)
dispatch do |logger|
logger.local_level = level if logger.respond_to?(:local_level=)
end
end
Alias for:
add
.
Alias for:
level=
.
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 GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 104
def stop_broadcasting_to(logger)
@broadcasts.delete(logger)
end
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 141
def unknown(*args, &block)
dispatch { |logger| logger.unknown(*args, &block) }
end
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 129
def warn(*args, &block)
dispatch { |logger| logger.warn(*args, &block) }
end
Sets the log level to Logger::WARN for the whole broadcast.
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 195
def warn!
dispatch { |logger| logger.warn! }
end
True
if the log level allows entries with severity Logger::WARN to be written to at least one broadcast. False
otherwise.
Source code GitHub
# File activesupport/lib/active_support/broadcast_logger.rb, line 190
def warn?
@broadcasts.any? { |logger| logger.warn? }
end