semlogr/semlogr

View on GitHub
lib/semlogr/sinks/filtering.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require 'semlogr/self_logger'

module Semlogr
  module Sinks
    class Filtering
      def initialize(filters, sink)
        @filters = filters
        @sink = sink
      end

      def emit(log_event)
        filtered = @filters.any? do |filter|
          begin
            filter.call(log_event)
          rescue StandardError => e
            SelfLogger.error("Failed to filter log event using filter #{filter.class}", e)

            false
          end
        end

        @sink.emit(log_event) unless filtered
      end
    end
  end
end