class Sapience::Logger
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
Public Class Methods
appender_thread()
click to toggle source
Separate appender thread responsible for reading log messages and calling the appenders in it's thread
# File lib/sapience/logger.rb, line 89 def self.appender_thread @@appender_thread end
appender_thread_active?()
click to toggle source
Returns true if the appender_thread
is active
# File lib/sapience/logger.rb, line 83 def self.appender_thread_active? @@appender_thread && @@appender_thread.running? end
close()
click to toggle source
Close all appenders and flush any outstanding messages
# File lib/sapience/logger.rb, line 31 def self.close return unless appender_thread appender_thread << lambda do Sapience.appenders.each do |appender| next unless appender.valid? begin close_appender(appender) rescue StandardError => exc logger.error "Appender thread: Failed to close appender: #{appender.inspect}", exc end end logger.trace "Appender thread: All appenders flushed" end end
close_appender(appender)
click to toggle source
# File lib/sapience/logger.rb, line 46 def self.close_appender(appender) logger.trace "Appender thread: Closing appender: #{appender.name}" appender.flush appender.close Sapience.remove_appender(appender) end
flush()
click to toggle source
Flush all queued log entries disk, database, etc.
All queued log messages are written and then each appender is flushed in turn
# File lib/sapience/logger.rb, line 13 def self.flush # rubocop:disable AbcSize return unless appender_thread appender_thread << lambda do Sapience.appenders.each do |appender| next unless appender.valid? begin logger.trace "Appender thread: Flushing appender: #{appender.class.name}" appender.flush rescue StandardError => exc $stderr.write("Appender thread: Failed to flush to appender: #{appender.inspect}\n #{exc.inspect}") end end logger.trace "Appender thread: All appenders flushed" end end
invalid_appenders_task()
click to toggle source
# File lib/sapience/logger.rb, line 93 def self.invalid_appenders_task @@invalid_appenders_task end
logger()
click to toggle source
Internal logger for Sapience
For example when an appender is not working etc.. By default logs to STDERR
# File lib/sapience/logger.rb, line 59 def self.logger @@logger ||= Sapience[Sapience] end
logger=(logger)
click to toggle source
Allow the internal logger to be overridden from its default to STDERR
Can be replaced with another Ruby logger or Rails logger, but never to Sapience::Logger itself since it is for reporting problems while trying to log to the various appenders
# File lib/sapience/logger.rb, line 101 def self.logger=(logger) @@logger = logger end
new(klass, level = nil, filter = nil)
click to toggle source
Returns a Logger
instance
Return the logger for a specific class, supports class specific log levels
logger = Sapience::Logger.new(self)
OR
logger = Sapience::Logger.new('MyClass')
Parameters:
application 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: Sapience.config.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
Calls superclass method
# File lib/sapience/logger.rb, line 126 def initialize(klass, level = nil, filter = nil) super end
start_appender_thread()
click to toggle source
Start the appender thread
# File lib/sapience/logger.rb, line 64 def self.start_appender_thread return false if appender_thread_active? @@appender_thread = Sapience.log_executor_class.new fail "Failed to start Appender Thread" unless @@appender_thread true end
start_invalid_appenders_task()
click to toggle source
# File lib/sapience/logger.rb, line 72 def self.start_invalid_appenders_task @@invalid_appenders_task = Concurrent::TimerTask.new(execution_interval: 120, timeout_interval: 5) do Sapience.appenders.each do |appender| next if appender.valid? logger.warn { "#{appender.class} is not valid. #{appender::VALIDATION_MESSAGE}" } end end invalid_appenders_task.execute end
Public Instance Methods
flush()
click to toggle source
# File lib/sapience/logger.rb, line 150 def flush self.class.flush end
log(log, message = nil, progname = nil, &block)
click to toggle source
Place log request on the queue for the Appender
thread to write to each appender in the order that they were registered
# File lib/sapience/logger.rb, line 132 def log(log, message = nil, progname = nil, &block) # Compatibility with ::Logger return add(log, message, progname, &block) unless log.is_a?(Sapience::Log) if @@appender_thread @@appender_thread << lambda do Sapience.appenders.each do |appender| next unless appender.valid? begin appender.log(log) rescue StandardError => exc $stderr.write("Appender thread: Failed to log to appender: #{appender.inspect}\n #{exc.inspect}") end end Sapience.clear_tags! end end end