Rails あるいは Sinatra など向けの rack middleware gem を作りました。Web アプリケーションへのアクセスを curl コマンドとしてログに残すという機能です。
なんで作ったのか
作った人が退職している&ドキュメントがない&開発環境の構築が難しいが元気に稼働しているアプリケーションを改修しなければならない時、日々運用している中で特定のリクエストの時だけエラーになるが再現方法が掴めない時、などにあると便利だなと思って作りました。それぞれ本質的な解決方法ではないですが、あると地味に便利です。
どうやって使うのか
使い方は簡単です。Gemfile に追加します。
gem 'recurl'
あとは、それぞれのアプリケーション内で初期化処理をします。 Logger
フォーマットのオブジェクトを渡してあげれば OK です。標準出力や物理ファイルなど適宜指定してください。
Sinatra
require 'rack'
require 'recurl'
require 'logger'
Recurl.configure do |config|
config.logger = Logger.new(STDOUT)
end
use Recurl::Rack::Middleware
require File.expand_path 'app', File.dirname(__FILE__)
run MyApp
Ruby on Rails
Recurl.configure do |config|
config.logger = Logger.new(STDOUT)
end
出力はこんな感じになります。
I, [2020-03-12T23:12:35.416211 #30019] INFO -- : curl -X GET -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' -H 'Cookie: key=value' 'http://localhost:3000/'
対応している Header など
全てのリクエストヘッダは出力していません。現時点で対応しているものは以下の通り。
- User-Agent
- Accept
- Content-Type
- Cookie
Authorize などカスタムヘッダは今後対応をしていきたいところです。また、ファイルのアップロードにも対応はしていません。POST / PUT などのパラメータには対応をしています。