diff --git a/app/logical/danbooru/http.rb b/app/logical/danbooru/http.rb index 6147218f7..e1b76b16b 100644 --- a/app/logical/danbooru/http.rb +++ b/app/logical/danbooru/http.rb @@ -1,6 +1,7 @@ require "danbooru/http/html_adapter" require "danbooru/http/xml_adapter" require "danbooru/http/cache" +require "danbooru/http/logger" require "danbooru/http/redirector" require "danbooru/http/retriable" require "danbooru/http/session" diff --git a/app/logical/danbooru/http/logger.rb b/app/logical/danbooru/http/logger.rb new file mode 100644 index 000000000..b4bb453b8 --- /dev/null +++ b/app/logical/danbooru/http/logger.rb @@ -0,0 +1,35 @@ +module Danbooru + class Http + class Logger < HTTP::Feature + HTTP::Options.register_feature :logger, self + + attr_reader :logger + + def initialize(logger: ::Logger.new(STDOUT)) + @logger = logger + end + + def perform(request, &block) + log_request(request) + response = yield request + log_response(request, response) + response + end + + def log_request(request) + logger.info do + verb = request.verb.to_s.upcase + headers = request.headers.map { |name, value| "#{name}: #{value}" }.join("\n") + "> #{verb} #{request.uri}\n#{headers}\n" + end + end + + def log_response(request, response) + logger.info do + headers = response.headers.map { |name, value| "#{name}: #{value}" }.join("\n") + "< #{response.status.to_i} | #{request.uri}\n#{headers}\n" + end + end + end + end +end