ログ記録構成
Overview
このガイドでは、 Mongoidアプリケーションで ログ記録を構成する 方法を学習できます。 ロギングを構成する際は、Mongoid がRubyドライバー上にモデルレイヤーを提供しており、ドライバーがMongoDBにデータ操作をディスパッチしていることに注意してください。そのため、Mongoid を使用するアプリケーションのログ出力の一部は Mongoid 自体から取得され、一部はドライバーからの取得となります。
ドライバー ロガー
MongoidクライアントはRubyドライバークライアントインスタンスであるため、Mongoidクライアントのロガーは Mongoid ロガーではなくRubyドライバー ロガーです。 次のコードは Mongoidクライアントロガーを作成します。
Mongoid.client(:default).logger
アプリケーションのフレームワークと Mongoid およびRubyドライバーの構成方法によっては、同じロガーインスタンスまたは異なる インスタンスが使用される場合があり、構成は異なる場合があります。
Ruby on Rails の構成
Ruby on Railsアプリケーションで使用する場合、Mongoid はデフォルトで Rails からロガーとログレベルを継承します。 Mongoid はドライバーのロガーを同じ ロガーインスタンスに設定します。
Rails.logger === Mongoid.logger # => true Mongoid.logger === Mongo::Logger.logger # => true
ログレベルを変更するには、 標準 Rails 構成 を使用します。次のブロックを環境構成ファイルの 1 つに配置します( config/environments/production.rb
など)。
Rails.application.configure do config.log_level = :debug end
注意
Mongoid が Railsアプリケーションで動作する場合、Mongoid は Rails のログレベルを継承するため、log_level
Mongoid 構成オプションは使用されません。
Mongoid ロガーまたはドライバー ロガーのいずれかを Rails ロガーとは異なる方法で構成するには、次のコードに示すように 初期化子 を使用します。
Rails.application.configure do config.after_initialize do # Change Mongoid log destination and level Mongoid.logger = Logger.new(STDERR).tap do |logger| logger.level = Logger::DEBUG end # Change driver log destination and level Mongo::Logger.logger = Logger.new(STDERR).tap do |logger| logger.level = Logger::DEBUG end end end
注意
Ruby標準ライブラリ Logger
には、ロガーが使用しているログデバイス(IO
オブジェクトなど)を返すためのプロビジョニングはありません。
例、Mongoid またはRubyドライバーが標準の Railsログファイル(log/development.log
Rails.logger
)にログするには、ファイルを個別に開き、結果のIO
を渡す必要があります。オブジェクトをLogger
コンストラクターに渡す追加オプション。
Mongoid は自分のロガーとドライバーのロガーを Rails ロガーと同じインスタンスに設定するため、 インスタンスのいずれかを変更すると、すべてのロガーに影響します。 例、次のコードは 3 つのロガーすべてのログレベルを変更します。
Mongoid::Logger.logger.level = Logger::DEBUG
スタンドアロン構成
Ruby on Railsアプリケーションにロードされていない場合、Mongoid は log_level
最上位構成オプションを尊重します。
development: clients: default: ... options: log_level: :debug
ログレベルをインラインで構成することもできます。
Mongoid.configure do |config| config.log_level = :debug end
デフォルトのログ先は標準エラーです。 ログの保存先を変更するには、次のコードに示すように新しいロガーインスタンスを作成します。
Mongoid.logger = Logger.new(STDERR).tap do |logger| logger.level = Logger::DEBUG end
Rubyドライバーのログレベルまたは宛先を変更するには、次のブロックをアプリケーションファイルに追加します。
Mongo::Logger.logger = Logger.new(STDERR).tap do |logger| logger.level = Logger::DEBUG end
注意
Mongoid は、スタンドアロンモードで実行中中にドライバーのロガーを変更しません。