我想将自动日志记录包含在我的HTTParty请求中,作为使用Thor构建的CLI应用程序的一部分。
我知道debug_output $stdout
,但默认格式化程序(:apache
和:curl
)比我想要的要多得多。我希望有极少的日志记录,只需输出请求端点,参数和响应,
PUT /users/123
{
email: example@email.com
}
RESPONSE 201
{
user: {
id: 123,
email: example@email.com
}
}
我可以从HTTParty的规范中看到Logger有一个add_formatter
方法,这让我想知道我是否可以构建一个自定义格式化程序,例如SimpleFormatter
,并将它附加到我的类,如< / p>
class API
include HTTParty
logger ::Logger.new("my simple logger"), :debug, :SimpleFormatter
end
但是源代码中的示例格式化程序似乎没有任何子类,所以我不确定我的自定义格式化程序应遵循哪个接口。
答案 0 :(得分:2)
您需要根据示例curl和apache示例实现initialize(logger, level)
和format(request, response)
。然后,您可以将其添加到格式化程序。
你也可以使用一些属性,但它们似乎并不是强制性的。
attr_accessor :level, :logger, :current_time
我在httparty示例中玩了一下,看它是否有效,似乎工作正常。这是我的样本和输出。
<强> party.rb 强>
require 'httparty'
require 'logger'
require './custom_formatter.rb'
HTTParty::Logger.add_formatter('custom', HTTParty::Logger::CustomFormatter)
# Or wrap things up in your own class
class StackExchange
include HTTParty
logger ::Logger.new("a logger"), :debug, :custom
base_uri 'api.stackexchange.com'
def initialize(service, page)
@options = { query: {site: service, page: page} }
end
def questions
self.class.get("/2.2/questions", @options)
end
def users
self.class.get("/2.2/users", @options)
end
end
stack_exchange = StackExchange.new("stackoverflow", 1)
puts stack_exchange.questions
puts stack_exchange.users
<强> custom_formatter.rb 强>
module HTTParty
module Logger
class CustomFormatter
attr_accessor :level
def initialize(logger, level)
@logger = logger
@level = level.to_sym
end
def format(request, response)
@logger.send @level, "hahahahaha "
end
end
end
end
输出:
--> D, [2016-06-02T22:30:26.613721 #5844] DEBUG -- : hahahahaha
--> D, [2016-06-02T22:30:27.440348 #5844] DEBUG -- : hahahahaha