Sha256: 5b9334bbfbc79e4796cb2d9f67accd319c6863e11a9968c275076592e8a7ba89

Contents?: true

Size: 1008 Bytes

Versions: 1

Compression:

Stored size: 1008 Bytes

Contents

require "logstop/version"
require "logger"

module Logstop
  class Formatter < ::Logger::Formatter
    FILTERED_STR = "[FILTERED]".freeze

    CREDIT_CARD_REGEX = /\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b/
    EMAIL_REGEX = /\b[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\b/i
    IP_REGEX = /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/
    PHONE_REGEX = /\b(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}\b/i
    SSN_REGEX = /\b\d{3}[\s-]?\d{2}[\s-]?\d{4}\b/i

    def initialize(formatter = nil, ip: false)
      @formatter = formatter || ::Logger::Formatter.new
      @ip = ip
    end

    def call(severity, timestamp, progname, msg)
      output = @formatter.call(severity, timestamp, progname, msg)
      output = output.gsub(IP_REGEX, FILTERED_STR) if @ip

      # order filters are applied is important
      output
        .gsub(CREDIT_CARD_REGEX, FILTERED_STR)
        .gsub(PHONE_REGEX, FILTERED_STR)
        .gsub(SSN_REGEX, FILTERED_STR)
        .gsub(EMAIL_REGEX, FILTERED_STR)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
logstop-0.1.0 lib/logstop.rb