Class: Zenrows::Hooks::LogSubscriber

Inherits:
Object
  • Object
show all
Defined in:
lib/zenrows/hooks/log_subscriber.rb

Overview

Built-in logging subscriber for ZenRows requests

Logs request lifecycle events using a configurable logger. Uses lazy evaluation (blocks) to avoid string interpolation overhead when log level is not enabled.

Examples:

Basic usage

Zenrows.configure do |c|
  c.logger = Logger.new(STDOUT)
  c.add_subscriber(Zenrows::Hooks::LogSubscriber.new)
end

With custom logger

subscriber = Zenrows::Hooks::LogSubscriber.new(logger: Rails.logger)
Zenrows.configure { |c| c.add_subscriber(subscriber) }

Author:

  • Ernest Bursa

Since:

  • 0.3.0

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(logger: nil) ⇒ LogSubscriber

Create a new log subscriber

Parameters:

  • logger (Logger, nil) (defaults to: nil)

    Logger instance. If nil, uses Zenrows.configuration.logger

Since:

  • 0.3.0



31
32
33
# File 'lib/zenrows/hooks/log_subscriber.rb', line 31

def initialize(logger: nil)
  @logger = logger
end

Instance Attribute Details

#loggerLogger? (readonly)

Returns Logger instance.

Returns:

  • (Logger, nil)

    Logger instance

Since:

  • 0.3.0



26
27
28
# File 'lib/zenrows/hooks/log_subscriber.rb', line 26

def logger
  @logger
end

Instance Method Details

#before_request(context) ⇒ Object

Log before request starts

Parameters:

  • context (Hash)

    Request context

Since:

  • 0.3.0



38
39
40
41
42
# File 'lib/zenrows/hooks/log_subscriber.rb', line 38

def before_request(context)
  log(:debug) do
    "ZenRows request: #{context[:method].to_s.upcase} #{context[:url]}"
  end
end

#on_error(error, context) ⇒ Object

Log error

Parameters:

  • error (Exception)

    The error that occurred

  • context (Hash)

    Request context

Since:

  • 0.3.0



64
65
66
67
68
69
70
71
# File 'lib/zenrows/hooks/log_subscriber.rb', line 64

def on_error(error, context)
  request_id = context.dig(:zenrows_headers, :request_id)

  message = "ZenRows #{context[:url]} failed: #{error.class} - #{error.message}"
  message += " [request_id: #{request_id}]" if request_id

  log(:error) { message }
end

#on_response(response, context) ⇒ Object

Log successful response

Parameters:

  • response (Object)

    HTTP response

  • context (Hash)

    Request context

Since:

  • 0.3.0



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/zenrows/hooks/log_subscriber.rb', line 48

def on_response(response, context)
  status = extract_status(response)
  duration = format_duration(context[:duration])
  cost = context.dig(:zenrows_headers, :request_cost)

  message = "ZenRows #{context[:url]} -> #{status}"
  message += " (#{duration})" if duration
  message += " [cost: #{cost}]" if cost

  log(:info) { message }
end