Docs Menu

ログ記録構成

このガイドでは、 Mongoidアプリケーションで ログ記録を構成する 方法を学習できます。 ロギングを構成する際は、Mongoid がRubyドライバー上にモデルレイヤーを提供しており、ドライバーがMongoDBにデータ操作をディスパッチしていることに注意してください。そのため、Mongoid を使用するアプリケーションのログ出力の一部は Mongoid 自体から取得され、一部はドライバーからの取得となります。

MongoidクライアントはRubyドライバークライアントインスタンスであるため、Mongoidクライアントのロガーは Mongoid ロガーではなくRubyドライバー ロガーです。 次のコードは Mongoidクライアントロガーを作成します。

Mongoid.client(:default).logger

アプリケーションのフレームワークと Mongoid およびRubyドライバーの構成方法によっては、同じロガーインスタンスまたは異なる インスタンスが使用される場合があり、構成は異なる場合があります。

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 は、スタンドアロンモードで実行中中にドライバーのロガーを変更しません。