lookitsatravis/api_guardian

View on GitHub
lib/api_guardian/logs.rb

Summary

Maintainability
A
0 mins
Test Coverage
module ApiGuardian
  module Logging
    class Logger < ActiveSupport::Logger
      def initialize(*args)
        super
        @formatter = Formatter.new
      end

      class Formatter < ActiveSupport::Logger::SimpleFormatter
        COLORS = {
          'black'   => 0,
          'red'     => 1,
          'green'   => 2,
          'yellow'  => 3,
          'blue'    => 4,
          'purple'  => 5,
          'magenta' => 5,
          'cyan'    => 6,
          'white'   => 7
        }.freeze

        COLORS.each_pair do |color, value|
          define_method color do |text|
            "\033[0;#{30 + value}m#{text}\033[0m"
          end

          define_method "light_#{color}" do |text|
            "\033[1;#{30 + value}m#{text}\033[0m"
          end
        end

        def call(severity, _time, _progname, msg)
          response = '[' + cyan('ApiGuardian') + '] '

          request_id = ApiGuardian.current_request ? ApiGuardian.current_request.uuid : nil
          response += '[' + light_green(request_id) + '] ' if request_id

          msg = msg.is_a?(String) ? msg : msg.inspect

          response += "[#{formatted_severity(severity)}] #{msg}\n"
          response
        end

        private

        def formatted_severity(severity)
          case severity
          when 'WARN'
            yellow(severity)
          when 'ERROR'
            light_red(severity)
          when 'FATAL'
            red(severity)
          when 'INFO'
            green(severity)
          else
            severity
          end
        end
      end
    end
  end
end