Class: PaulBunyan::LogRelayer
- Inherits:
-
Object
- Object
- PaulBunyan::LogRelayer
- Extended by:
- Forwardable
- Includes:
- Logger::Severity
- Defined in:
- lib/paul_bunyan/log_relayer.rb
Constant Summary collapse
- DELEGATED_METHODS =
delegate non-relayed methods to the primary logger
%i( progname progname= level level= sev_threshold sev_threshold= formatter formatter= datetime_format datetime_format= close debug? info? warn? error? fatal? )
Instance Attribute Summary collapse
-
#loggers ⇒ Object
readonly
Returns the value of attribute loggers.
Instance Method Summary collapse
- #<<(msg) ⇒ Object
- #add(severity, message = nil, progname = nil, &block) ⇒ Object (also: #log)
- #add_logger(logger) ⇒ Object
- #add_metadata(metadata = {}, **kw_metadata) ⇒ Object
- #clear_metadata! ⇒ Object
- #clear_tags! ⇒ Object
- #current_metadata ⇒ Object
- #current_tags ⇒ Object
- #debug(progname = nil, &block) ⇒ Object
- #error(progname = nil, &block) ⇒ Object
- #fatal(progname = nil, &block) ⇒ Object
- #flush ⇒ Object
- #info(progname = nil, &block) ⇒ Object
-
#initialize ⇒ LogRelayer
constructor
A new instance of LogRelayer.
- #level ⇒ Object
- #pop_tags(size = 1) ⇒ Object
- #primary_logger ⇒ Object
- #push_tags(*tags) ⇒ Object
- #remove_logger(logger) ⇒ Object
- #remove_metadata(metadata = {}, **kw_metadata) ⇒ Object
- #secondary_loggers ⇒ Object
- #silence(level = Logger::ERROR, &block) ⇒ Object
- #tagged(*tags) ⇒ Object
- #unknown(progname = nil, &block) ⇒ Object
- #warn(progname = nil, &block) ⇒ Object
- #with_metadata(metadata = {}, **kw_metadata) ⇒ Object
Constructor Details
#initialize ⇒ LogRelayer
Returns a new instance of LogRelayer.
49 50 51 |
# File 'lib/paul_bunyan/log_relayer.rb', line 49 def initialize @loggers = [] end |
Instance Attribute Details
#loggers ⇒ Object (readonly)
Returns the value of attribute loggers.
25 26 27 |
# File 'lib/paul_bunyan/log_relayer.rb', line 25 def loggers @loggers end |
Instance Method Details
#<<(msg) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/paul_bunyan/log_relayer.rb', line 61 def <<(msg) loggers.reduce(nil) do |memo, logger| n = logger << msg # this would be simpler with an array, but would generate unnecessary garbage if memo.nil? || n.nil? memo || n else memo < n ? memo : n end end end |
#add(severity, message = nil, progname = nil, &block) ⇒ Object Also known as: log
53 54 55 56 57 58 |
# File 'lib/paul_bunyan/log_relayer.rb', line 53 def add(severity, = nil, progname = nil, &block) block = memoized_block(&block) if block loggers.reduce(true) do |memo, logger| logger.add(severity, , progname, &block) && memo end end |
#add_logger(logger) ⇒ Object
35 36 37 38 39 40 41 42 43 |
# File 'lib/paul_bunyan/log_relayer.rb', line 35 def add_logger(logger) loggers.push(logger) # Appease rails checking if logger already writes to stdout if loggers.length == 1 @logdev = loggers[0].instance_variable_get(:@logdev) end logger end |
#add_metadata(metadata = {}, **kw_metadata) ⇒ Object
148 149 150 |
# File 'lib/paul_bunyan/log_relayer.rb', line 148 def ( = {}, **) messaging_loggers(:add_metadata, , **) end |
#clear_metadata! ⇒ Object
152 153 154 |
# File 'lib/paul_bunyan/log_relayer.rb', line 152 def messaging_loggers(:clear_metadata!) end |
#clear_tags! ⇒ Object
133 134 135 |
# File 'lib/paul_bunyan/log_relayer.rb', line 133 def messaging_loggers(:clear_tags!) end |
#current_metadata ⇒ Object
156 157 158 159 160 161 162 163 164 |
# File 'lib/paul_bunyan/log_relayer.rb', line 156 def loggers.inject({}) do |agg, logger| if logger.respond_to?(:current_metadata) agg.merge(logger.) else agg end end end |
#current_tags ⇒ Object
116 117 118 119 120 121 |
# File 'lib/paul_bunyan/log_relayer.rb', line 116 def = loggers.each_with_object(Set.new) do |logger, set| set.merge(logger.) if logger.respond_to?(:current_tags) end .to_a end |
#debug(progname = nil, &block) ⇒ Object
74 75 76 |
# File 'lib/paul_bunyan/log_relayer.rb', line 74 def debug(progname = nil, &block) add(DEBUG, nil, progname, &block) end |
#error(progname = nil, &block) ⇒ Object
86 87 88 |
# File 'lib/paul_bunyan/log_relayer.rb', line 86 def error(progname = nil, &block) add(ERROR, nil, progname, &block) end |
#fatal(progname = nil, &block) ⇒ Object
90 91 92 |
# File 'lib/paul_bunyan/log_relayer.rb', line 90 def fatal(progname = nil, &block) add(FATAL, nil, progname, &block) end |
#flush ⇒ Object
137 138 139 |
# File 'lib/paul_bunyan/log_relayer.rb', line 137 def flush messaging_loggers(:flush) end |
#info(progname = nil, &block) ⇒ Object
78 79 80 |
# File 'lib/paul_bunyan/log_relayer.rb', line 78 def info(progname = nil, &block) add(INFO, nil, progname, &block) end |
#level ⇒ Object
98 99 100 101 |
# File 'lib/paul_bunyan/log_relayer.rb', line 98 def level logger = loggers.min { |a, b| a.level <=> b.level } logger.nil? ? DEBUG : logger.level end |
#pop_tags(size = 1) ⇒ Object
129 130 131 |
# File 'lib/paul_bunyan/log_relayer.rb', line 129 def (size = 1) messaging_loggers(:pop_tags, size) end |
#primary_logger ⇒ Object
27 28 29 |
# File 'lib/paul_bunyan/log_relayer.rb', line 27 def primary_logger loggers[0] end |
#push_tags(*tags) ⇒ Object
123 124 125 126 127 |
# File 'lib/paul_bunyan/log_relayer.rb', line 123 def (*) .flatten.reject(&:blank?).tap do || messaging_loggers(:push_tags, *) end end |
#remove_logger(logger) ⇒ Object
45 46 47 |
# File 'lib/paul_bunyan/log_relayer.rb', line 45 def remove_logger(logger) loggers.delete(logger) end |
#remove_metadata(metadata = {}, **kw_metadata) ⇒ Object
166 167 168 |
# File 'lib/paul_bunyan/log_relayer.rb', line 166 def ( = {}, **) messaging_loggers(:remove_metadata, , **) end |
#secondary_loggers ⇒ Object
31 32 33 |
# File 'lib/paul_bunyan/log_relayer.rb', line 31 def secondary_loggers loggers[1..-1] || [] end |
#silence(level = Logger::ERROR, &block) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/paul_bunyan/log_relayer.rb', line 103 def silence(level = Logger::ERROR, &block) loggers = self.loggers.select { |l| l.respond_to?(:silence) }.reverse silencer = proc do logger = loggers.pop if logger logger.silence(level, &silencer) else block.call end end silencer.call end |
#tagged(*tags) ⇒ Object
141 142 143 144 145 146 |
# File 'lib/paul_bunyan/log_relayer.rb', line 141 def tagged(*) = (*) yield self ensure (.size) end |
#unknown(progname = nil, &block) ⇒ Object
94 95 96 |
# File 'lib/paul_bunyan/log_relayer.rb', line 94 def unknown(progname = nil, &block) add(UNKNOWN, nil, progname, &block) end |
#warn(progname = nil, &block) ⇒ Object
82 83 84 |
# File 'lib/paul_bunyan/log_relayer.rb', line 82 def warn(progname = nil, &block) add(WARN, nil, progname, &block) end |
#with_metadata(metadata = {}, **kw_metadata) ⇒ Object
170 171 172 173 174 175 |
# File 'lib/paul_bunyan/log_relayer.rb', line 170 def ( = {}, **) (, **) yield ensure (, **) end |