Class: CloseYourIt::Rails::LogBroadcast

Inherits:
Logger
  • Object
show all
Defined in:
lib/closeyourit/rails/log_broadcast.rb

Overview

Sink Logger-compatibile agganciato a Rails.logger (broadcast opt-in, config.capture_rails_logs): ogni log dell'app ≥ soglia (capture_rails_logs_min_level, default :warn) viene re-inoltrato a CloseYourIt.log → ingest /logs. Sotto soglia: no-op (nessun invio). Il default è conservativo (:warn) per non inondare lo stream col rumore info del framework (CYRB-7). Non scrive su alcun device (inoltra soltanto).

Constant Summary collapse

SEVERITY_LEVELS =
{ 0 => "debug", 1 => "info", 2 => "warning", 3 => "error", 4 => "fatal", 5 => "fatal" }.freeze
LEVEL_BY_SYMBOL =
{ debug: 0, info: 1, warn: 2, warning: 2, error: 3, fatal: 4 }.freeze

Instance Method Summary collapse

Constructor Details

#initialize(min_level = :warn) ⇒ LogBroadcast

Returns a new instance of LogBroadcast.



16
17
18
19
# File 'lib/closeyourit/rails/log_broadcast.rb', line 16

def initialize(min_level = :warn)
  super(nil) # nessun device: inoltra soltanto
  self.level = LEVEL_BY_SYMBOL.fetch(min_level.to_sym, 2)
end

Instance Method Details

#add(severity, message = nil, progname = nil) ⇒ Object

Sovrascrive il punto unico di ::Logger: filtra per soglia e per esclusioni, poi re-inoltra a CloseYourIt.log. Il secondo filtro esiste perché la soglia da sola non distingue il rumore: una ActionController::RoutingError da favicon mancante è un logger.error come un altro, e senza controllare il TESTO rientrava dal canale log dopo essere stata esclusa da quello degli errori (CYRB-17). Il gating vive qui e non in CloseYourIt.log: quel metodo serve anche il dev che scrive un log di proposito, e le sue righe non si silenziano.



27
28
29
30
31
32
33
34
35
36
# File 'lib/closeyourit/rails/log_broadcast.rb', line 27

def add(severity, message = nil, progname = nil)
  severity ||= ::Logger::UNKNOWN
  return true if severity < level

  text = message || (block_given? ? yield : nil) || progname
  return true if text.nil? || CloseYourIt.ignored_log_message?(text)

  CloseYourIt.log(SEVERITY_LEVELS.fetch(severity, "info"), text)
  true
end