Class: Zenrows::Hooks::LogSubscriber
- Inherits:
-
Object
- Object
- Zenrows::Hooks::LogSubscriber
- 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.
Instance Attribute Summary collapse
-
#logger ⇒ Logger?
readonly
Logger instance.
Instance Method Summary collapse
-
#before_request(context) ⇒ Object
Log before request starts.
-
#initialize(logger: nil) ⇒ LogSubscriber
constructor
Create a new log subscriber.
-
#on_error(error, context) ⇒ Object
Log error.
-
#on_response(response, context) ⇒ Object
Log successful response.
Constructor Details
#initialize(logger: nil) ⇒ LogSubscriber
Create a new log subscriber
31 32 33 |
# File 'lib/zenrows/hooks/log_subscriber.rb', line 31 def initialize(logger: nil) @logger = logger end |
Instance Attribute Details
#logger ⇒ Logger? (readonly)
Returns Logger instance.
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
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
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) = "ZenRows #{context[:url]} failed: #{error.class} - #{error.message}" += " [request_id: #{request_id}]" if request_id log(:error) { } end |
#on_response(response, context) ⇒ Object
Log successful response
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) = "ZenRows #{context[:url]} -> #{status}" += " (#{duration})" if duration += " [cost: #{cost}]" if cost log(:info) { } end |