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 messages where the class name matches the supplied
regular expression. All other messages will be ignored
Proc: Only include log messages where the supplied Proc returns true
The Proc must return true or false
60 61 62 |
# File 'lib/semantic_logger/logger.rb', line 60 def initialize(klass, level = nil, filter = nil) super(klass, level, filter) end |
Class Attribute Details
.subscribers ⇒ Object (readonly)
Returns the value of attribute subscribers.
20 21 22 |
# File 'lib/semantic_logger/logger.rb', line 20 def subscribers @subscribers end |
Class Method Details
.call_subscribers(log) ⇒ Object
81 82 83 84 85 86 87 88 89 |
# File 'lib/semantic_logger/logger.rb', line 81 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
23 24 25 |
# File 'lib/semantic_logger/logger.rb', line 23 def self.processor @processor ||= Processor.new end |
.subscribe(object = nil, &block) ⇒ Object
8 9 10 11 12 13 14 15 16 17 |
# File 'lib/semantic_logger/logger.rb', line 8 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
28 29 30 31 32 |
# File 'lib/semantic_logger/logger.rb', line 28 def self.sync! return if @processor.is_a?(SyncProcessor) @processor = SyncProcessor.new(@processor&.appenders) end |
.sync? ⇒ Boolean
Running without the background logging thread?
35 36 37 |
# File 'lib/semantic_logger/logger.rb', line 35 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.
69 70 71 72 73 74 75 76 |
# File 'lib/semantic_logger/logger.rb', line 69 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 |