class SweetLogger::Logstash

Constants

MUTEX

Public Class Methods

silence(routes) click to toggle source
# File lib/sweet_logger/logstash.rb, line 11
def self.silence(routes)
  @silencer_re = /#{ routes.map { |e| Regexp.escape(e) }.join("|") }/
end
silencer_re() click to toggle source
# File lib/sweet_logger/logstash.rb, line 15
def self.silencer_re
  @silencer_re
end

Public Instance Methods

flush(entries) click to toggle source
# File lib/sweet_logger/logstash.rb, line 55
def flush(entries)
  entries.each do |logger, args, block|
    logger.add_before_sweet_logger *args, &block
  end
end
shall_be_silenced?(path) click to toggle source
# File lib/sweet_logger/logstash.rb, line 61
def shall_be_silenced?(path)
  path =~ self.class.silencer_re
end
wrap(path) { || ... } click to toggle source
# File lib/sweet_logger/logstash.rb, line 19
def wrap(path, &block)
  silenced = shall_be_silenced?(path)
  we_started_this = ! Thread.main[:sweet_logger_stash]

  MUTEX.synchronize do
    if we_started_this && ! silenced
      Thread.main[:sweet_logger_stash] = []
    else
      Thread.current[:sweet_logger_stash] = []
    end
  end

  yield

ensure
  MUTEX.synchronize do
    if silenced || ! Thread.current[:sweet_logger_stash]
      Thread.current[:sweet_logger_stash] = []
    end

    if Thread.main[:sweet_logger_stash]
      if we_started_this
        flush Thread.main[:sweet_logger_stash]
        Thread.main[:sweet_logger_stash] = nil
      else
        Thread.main[:sweet_logger_stash] += Thread.current[:sweet_logger_stash]
      end

    elsif
      flush Thread.current[:sweet_logger_stash]
    end

    Thread.current[:sweet_logger_stash] = nil
  end
end