1. ホーム
  2. ruby

[解決済み] Ruby Logger のログをファイルだけでなく標準出力にも出力するにはどうしたらいいですか?

2023-01-05 13:47:01

質問

ロガーでティー機能のようなものがあります。

どのように解決するのですか?

を記述することで、擬似的な IO クラスで、複数の IO オブジェクトに書き込むクラスです。 のようなものです。

class MultiIO
  def initialize(*targets)
     @targets = targets
  end

  def write(*args)
    @targets.each {|t| t.write(*args)}
  end

  def close
    @targets.each(&:close)
  end
end

そして、それをログファイルとして設定します。

log_file = File.open("log/debug.log", "a")
Logger.new MultiIO.new(STDOUT, log_file)

毎回 Logger を呼び出す puts あなたの MultiIO オブジェクトに書き込むと、両方の STDOUT とログファイルの両方に書き込まれます。

編集してください。 私は先に、残りのインターフェイスを把握しました。 ログデバイスは writeclose (ただし puts ). としている限り MultiIO がそれらに応答し、実際の IO オブジェクトにプロキシする限り、 これは動作するはずです。