Class: SemanticLogger::Logger
- Includes:
- Concerns::Compatibility
- Defined in:
- lib/semantic_logger/logger.rb
Overview
Logger stores the class name to be used for all log messages so that every log message written by this instance will include the class name
Direct Known Subclasses
Class Attribute Summary collapse
-
.subscribers ⇒ Object
readonly
Returns the value of attribute subscribers.
Attributes inherited from Base
Class Method Summary collapse
- .call_subscribers(log) ⇒ Object
- .processor ⇒ Object
- .subscribe(object = nil, &block) ⇒ Object
-
.sync! ⇒ Object
Switch to the synchronous processor.
-
.sync? ⇒ Boolean
Running without the background logging thread?.
Instance Method Summary collapse
-
#initialize(klass, level = nil, filter = nil) ⇒ Logger
constructor
Returns a Logger instance.
-
#log(log, message = nil, progname = nil, &block) ⇒ Object
Place log request on the queue for the Appender thread to write to each appender in the order that they were registered.
Methods included from Concerns::Compatibility
#add, #close, included, #reopen
Methods inherited from Base
#backtrace, #fast_tag, #level, #level=, #measure, #named_tags, #pop_tags, #push_tags, #should_log?, #silence, #tagged, #tags
Constructor Details
#initialize(klass, level = nil, filter = nil) ⇒ Logger
Returns a Logger instance
Return the logger for a specific class, supports class specific log levels
logger = SemanticLogger::Logger.new(self)
OR
logger = SemanticLogger::Logger.new('MyClass')
Parameters:
klass
A class, module or a string with the application/class name
to be used in the logger
level
The initial log level to start with for this logger instance
Default: SemanticLogger.default_level
filter [Regexp|Proc]
RegExp: Only include log where the class name matches the supplied
regular expression. All other will be ignored
Proc: Only include log where the supplied Proc returns true
The Proc must return true or false
59 60 61 |
# File 'lib/semantic_logger/logger.rb', line 59 def initialize(klass, level = nil, filter = nil) super(klass, level, filter) end |
Class Attribute Details
.subscribers ⇒ Object (readonly)
Returns the value of attribute subscribers.
19 20 21 |
# File 'lib/semantic_logger/logger.rb', line 19 def subscribers @subscribers end |
Class Method Details
.call_subscribers(log) ⇒ Object
80 81 82 83 84 85 86 87 88 |
# File 'lib/semantic_logger/logger.rb', line 80 def self.call_subscribers(log) return unless @subscribers @subscribers.each do |subscriber| subscriber.call(log) rescue Exception => e processor.logger.error("Exception calling :on_log subscriber", e) end end |
.processor ⇒ Object
22 23 24 |
# File 'lib/semantic_logger/logger.rb', line 22 def self.processor @processor ||= Processor.new end |
.subscribe(object = nil, &block) ⇒ Object
7 8 9 10 11 12 13 14 15 16 |
# File 'lib/semantic_logger/logger.rb', line 7 def self.subscribe(object = nil, &block) subscriber = block || object unless subscriber.is_a?(Proc) || subscriber.respond_to?(:call) raise("When supplying an on_log subscriber, it must support the #call method") end subscribers = (@subscribers ||= Concurrent::Array.new) subscribers << subscriber unless subscribers.include?(subscriber) end |
.sync! ⇒ Object
Switch to the synchronous processor
27 28 29 30 31 |
# File 'lib/semantic_logger/logger.rb', line 27 def self.sync! return if @processor.is_a?(SyncProcessor) @processor = SyncProcessor.new(@processor&.appenders) end |
.sync? ⇒ Boolean
Running without the background logging thread?
34 35 36 |
# File 'lib/semantic_logger/logger.rb', line 34 def self.sync? processor.is_a?(SyncProcessor) end |
Instance Method Details
#log(log, message = nil, progname = nil, &block) ⇒ Object
Place log request on the queue for the Appender thread to write to each appender in the order that they were registered
Subscribers are called inline before handing off to the queue so that they can capture additional context information as needed.
68 69 70 71 72 73 74 75 |
# File 'lib/semantic_logger/logger.rb', line 68 def log(log, = nil, progname = nil, &block) # Compatibility with ::Logger return add(log, , progname, &block) unless log.is_a?(SemanticLogger::Log) Logger.call_subscribers(log) Logger.processor.log(log) end |