File: loggable.rb

package info (click to toggle)
ruby-httpx 1.7.2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,816 kB
  • sloc: ruby: 12,209; makefile: 4
file content (68 lines) | stat: -rw-r--r-- 1,735 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# frozen_string_literal: true

require "fiber" if RUBY_VERSION < "3.0.0"

module HTTPX
  module Loggable
    COLORS = {
      black: 30,
      red: 31,
      green: 32,
      yellow: 33,
      blue: 34,
      magenta: 35,
      cyan: 36,
      white: 37,
    }.freeze

    USE_DEBUG_LOG = ENV.key?("HTTPX_DEBUG")

    def log(
      level: @options.debug_level,
      color: nil,
      debug_level: @options.debug_level,
      debug: @options.debug,
      &msg
    )
      return unless debug_level >= level

      debug_stream = debug || ($stderr if USE_DEBUG_LOG)

      return unless debug_stream

      klass = self.class

      until (class_name = klass.name)
        klass = klass.superclass
      end

      message = +"(time:#{Time.now.utc}, pid:#{Process.pid}, " \
                 "tid:#{Thread.current.object_id}, " \
                 "fid:#{Fiber.current.object_id}, " \
                 "self:#{class_name}##{object_id}) "
      message << msg.call << "\n"
      message = "\e[#{COLORS[color]}m#{message}\e[0m" if color && debug_stream.respond_to?(:isatty) && debug_stream.isatty
      debug_stream << message
    end

    def log_exception(ex, level: @options.debug_level, color: nil, debug_level: @options.debug_level, debug: @options.debug)
      log(level: level, color: color, debug_level: debug_level, debug: debug) { ex.full_message }
    end

    def log_redact_headers(text)
      log_redact(text, @options.debug_redact == :headers)
    end

    def log_redact_body(text)
      log_redact(text, @options.debug_redact == :body)
    end

    def log_redact(text, should_redact)
      should_redact ||= @options.debug_redact == true

      return text.to_s unless should_redact

      "[REDACTED]"
    end
  end
end