跳到內容 跳到搜尋

Active Support 廣播 Logger

廣播記錄器是一個用於將訊息寫入多個 IO 的記錄器。它通常用於開發中,在 STDOUT 上顯示訊息,並將它們寫入檔案 (development.log)。使用廣播記錄器,您可以將記錄廣播到無限數量的接收器。

BroadcastLogger 作為標準記錄器,您可以使用所有慣用的方法。但是,此記錄器上的所有方法都會傳播並委派給廣播中其他記錄器。

廣播您的記錄。

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.

將記錄器新增到廣播中。

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.

修改所有廣播記錄器的記錄層級。

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.

停止廣播記錄到接收器。

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.

至少一個接收器必須是廣播的一部分。否則,您的記錄將不會寫入任何地方。例如

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

如果您將自訂記錄器連同自訂方法新增到廣播中,則 `BroadcastLogger` 會代理它們並傳回原始值,或原始值的陣列,具體取決於廣播中多少記錄器回應方法

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]
方法
#
A
B
C
D
E
F
I
L
N
S
U
W
包含的模組

屬性

[R] 廣播

傳回此廣播中所有記錄器。

[R] 格式化程式
[RW] 程式名稱

類別公開方法

new(*loggers)

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

  broadcast_to(*loggers)
end

執行個體公開方法

<<(message)

# File activesupport/lib/active_support/broadcast_logger.rb, line 112
def <<(message)
  dispatch { |logger| logger.<<(message) }
end

add(*args, &block)

別名:log
# File activesupport/lib/active_support/broadcast_logger.rb, line 116
def add(*args, &block)
  dispatch { |logger| logger.add(*args, &block) }
end

broadcast_to(*loggers)

將記錄器加入廣播。

broadcast_logger = ActiveSupport::BroadcastLogger.new
broadcast_logger.broadcast_to(Logger.new(STDOUT), Logger.new(STDERR))
# File activesupport/lib/active_support/broadcast_logger.rb, line 93
def broadcast_to(*loggers)
  @broadcasts.concat(loggers)
end

close()

# File activesupport/lib/active_support/broadcast_logger.rb, line 162
def close
  dispatch { |logger| logger.close }
end

debug(*args, &block)

# File activesupport/lib/active_support/broadcast_logger.rb, line 121
def debug(*args, &block)
  dispatch { |logger| logger.debug(*args, &block) }
end

debug!()

將整個廣播的日誌層級設為 Logger::DEBUG。

# File activesupport/lib/active_support/broadcast_logger.rb, line 173
def debug!
  dispatch { |logger| logger.debug! }
end

debug?()

如果日誌層級允許將嚴重性為 Logger::DEBUG 的項目寫入至少一個廣播,則為 True。否則為 False

# File activesupport/lib/active_support/broadcast_logger.rb, line 168
def debug?
  @broadcasts.any? { |logger| logger.debug? }
end

error(*args, &block)

# File activesupport/lib/active_support/broadcast_logger.rb, line 133
def error(*args, &block)
  dispatch { |logger| logger.error(*args, &block) }
end

error!()

將整個廣播的日誌層級設為 Logger::ERROR。

# File activesupport/lib/active_support/broadcast_logger.rb, line 206
def error!
  dispatch { |logger| logger.error! }
end

error?()

如果日誌層級允許將嚴重性為 Logger::ERROR 的項目寫入至少一個廣播,則為 True。否則為 False

# File activesupport/lib/active_support/broadcast_logger.rb, line 201
def error?
  @broadcasts.any? { |logger| logger.error? }
end

fatal(*args, &block)

# File activesupport/lib/active_support/broadcast_logger.rb, line 137
def fatal(*args, &block)
  dispatch { |logger| logger.fatal(*args, &block) }
end

fatal!()

將整個廣播的日誌層級設為 Logger::FATAL。

# File activesupport/lib/active_support/broadcast_logger.rb, line 217
def fatal!
  dispatch { |logger| logger.fatal! }
end

fatal?()

如果記錄層級允許嚴重性為 Logger::FATAL 的項目寫入至少一個廣播,則為 True。否則為 False

# File activesupport/lib/active_support/broadcast_logger.rb, line 212
def fatal?
  @broadcasts.any? { |logger| logger.fatal? }
end

formatter=(formatter)

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

  @formatter = formatter
end

info(*args, &block)

# File activesupport/lib/active_support/broadcast_logger.rb, line 125
def info(*args, &block)
  dispatch { |logger| logger.info(*args, &block) }
end

info!()

將整個廣播的記錄層級設定為 Logger::INFO。

# File activesupport/lib/active_support/broadcast_logger.rb, line 184
def info!
  dispatch { |logger| logger.info! }
end

info?()

如果記錄層級允許嚴重性為 Logger::INFO 的項目寫入至少一個廣播,則為 True。否則為 False

# File activesupport/lib/active_support/broadcast_logger.rb, line 179
def info?
  @broadcasts.any? { |logger| logger.info? }
end

initialize_copy(other)

# 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

level()

# File activesupport/lib/active_support/broadcast_logger.rb, line 108
def level
  @broadcasts.map(&:level).min
end

level=(level)

別名為:sev_threshold=
# File activesupport/lib/active_support/broadcast_logger.rb, line 151
def level=(level)
  dispatch { |logger| logger.level = level }
end

local_level=(level)

# 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

log(*args, &block)

別名為:add

sev_threshold=(level)

別名為:level=

stop_broadcasting_to(logger)

從廣播中移除一個記錄器。當移除一個記錄器時,傳送到廣播的訊息將不再寫入其接收器。

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

broadcast_logger.stop_broadcasting_to(sink)
# File activesupport/lib/active_support/broadcast_logger.rb, line 104
def stop_broadcasting_to(logger)
  @broadcasts.delete(logger)
end

unknown(*args, &block)

# File activesupport/lib/active_support/broadcast_logger.rb, line 141
def unknown(*args, &block)
  dispatch { |logger| logger.unknown(*args, &block) }
end

warn(*args, &block)

# File activesupport/lib/active_support/broadcast_logger.rb, line 129
def warn(*args, &block)
  dispatch { |logger| logger.warn(*args, &block) }
end

warn!()

將整個廣播的記錄層級設定為 Logger::WARN。

# File activesupport/lib/active_support/broadcast_logger.rb, line 195
def warn!
  dispatch { |logger| logger.warn! }
end

warn?()

如果記錄層級允許將嚴重性為 Logger::WARN 的項目寫入至少一個廣播,則為 True。否則為 False

# File activesupport/lib/active_support/broadcast_logger.rb, line 190
def warn?
  @broadcasts.any? { |logger| logger.warn? }
end