Rubyで標準エラー出力に対してwarning吐いてる犯人を探したい!

gemとかが標準エラー出力に対して「deprecatedなメソッド呼んでるよ〜」みたいなwarningを吐いてくれることがあると思うんですが、自分のプロダクトコード側でそのメソッドを呼んでいるわけではなくて依存してる別のgemの気がする、犯人は誰だ!みたいなときの話です。

だいたい./vendor/bundle以下を検索すればまあ犯人見つかるというのはあるんですが、メソッド名を動的に作ってるやつとかがいると引っかかってこなかったり、あとは同じ文字列がたまたま関係ないところで出現してるみたいなときもあるにはあり、「このwarningを出してるところのスタックトレースがほしいよお!」ってなることがある。そのようなときには、

class CustomStdErr < IO
  def write(*args)
    p caller
    STDERR.write(*args)
  end
end

$stderr = CustomStdErr.new(STDERR.fileno)

warn("heyhey")

このようにして標準エラー出力をジャックしてやるとスタックトレースが取れて便利だと思う。