1. ホーム
  2. ruby-on-rails

[解決済み] Railsで何かを独立したログファイルに記録するにはどうすればよいですか?

2022-04-25 16:18:36

質問

railsで、ある情報を標準のdevelopment.logやproduction.logではなく、別のログファイルに記録したいのですが、どうすればいいですか?私はモデルクラスからこのロギングを行いたいと思います。

どのように解決しますか?

任意のモデルの内部から、Loggerオブジェクトを自分で作成することができます。ファイル名をコンストラクタに渡すだけで、そのオブジェクトを通常のRailsの logger :

class User < ActiveRecord::Base
  def my_logger
    @@my_logger ||= Logger.new("#{Rails.root}/log/my.log")
  end

  def before_save
    my_logger.info("Creating user with name #{self.name}")
  end
end

ここでは、ロガーをメモするために class 属性を使用しました。この方法では、Userオブジェクトが作成されるたびにロガーが作成されることはありませんが、そうする必要はないでしょう。を注入することができることも覚えておいてください。 my_logger メソッドを直接 ActiveRecord::Base クラス (または、あまりパッチを適用したくない場合は、独自のスーパークラス) に追加して、アプリのモデル間でコードを共有できるようにします。