Overview
このガイドでは、 Cドライバーを使用してアプリケーションの構造化ログを構成する方法を学習できます。ログ記録 を使用すると、ドライバー アクティビティの個別のイベントベースのログを表示できます。
ロガーは、指定可能な 重大度 または冗長のレベルでメッセージをログ。アプリケーションでのログ記録 を有効にすると、アプリケーションのアクティビティに関するさまざまな詳細レベルでの情報を受け取ることができます。ドライバーを使用すると、次の重大度レベルで分類された情報をログできます。
emergency
alert
critical
error
warn
notice
info
debug
trace
off
上記のリストは重大度レベルの低い順に並べられており、emergency
が最も高い重大度レベルです。重大度レベルを指定すると、ドライバーはより高い重大度レベルを持つすべてのメッセージもログに記録します。例、ログレベルを critical
に設定すると、ドライバーは emergency
と alert
の重大度レベルを持つメッセージもログします。
指定する重大度レベルが低いほど、ドライバーがログする情報が多くなり、アプリケーションのパフォーマンスに影響可能性があります。
Tip
ロギング重大度レベルの詳細については、メッセージ ロギング用の Syslog 標準に関する Wikipedia のエントリを参照してください。
ログ作成オプション
構造化ログ設定は、mongoc_structured_log_opts_t
インスタンスによって明示的に追跡されます。Cドライバーは環境変数からデフォルト設定を取得し、追加の任意のプログラムによる構成を提供します。環境変数を指定するには、mongoc_structured_log_opts_new()
を使用します。mongoc_structured_log_opts_t
の詳細については、libmongoc APIドキュメントのmongoc_structured_log_opts_tを参照してください。
通常、環境変数はプログラムで上書きできるデフォルトを指定します。環境によってプログラムによるデフォルトを上書きできる、逆の動作をリクエストには、mongoc_structured_log_opts_set_max_levels_from_env()
関数を使用します。構造化ログメッセージは ハンドラーによって任意の方法でフィルタリングされる可能性がありますが、パフォーマンスの最適化と便宜上、報告されるメッセージの最大ログレベルを コンポーネントごとの設定で制限します。mongoc_structured_log_opts_set_max_levels_from_env()
の詳細については、libmongoc APIドキュメントのmongoc_structured_log_opts_set_max_levels_from_env() を参照してください。
ログを実装する
次のコード ブロックでは、次の操作を実行してログ記録を実装します。
ロギングを構成するための
mongoc_structured_log_opts_t
タイプを作成します必要なログレベルを に設定します
INFO
ログメッセージを処理するためのハンドラー関数を提供します
mongoc_client_set_structured_log_opts()
関数を使用して、クライアントまたはクライアントプールにロギング オプションを適用します
static void log_handler(const mongoc_structured_log_entry_t *entry, void *user_data) { printf("Log: %s - %s\n", mongoc_structured_log_get_component_name(mongoc_structured_log_entry_get_component(entry)), mongoc_structured_log_entry_get_message_string(entry)); } int main(void) { mongoc_init(); // Create logging options mongoc_structured_log_opts_t *log_opts = mongoc_structured_log_opts_new(); mongoc_structured_log_opts_set_max_level_for_all_components(log_opts, MONGOC_STRUCTURED_LOG_LEVEL_INFO); mongoc_structured_log_opts_set_handler(log_opts, log_handler, NULL); // Create client and set logging mongoc_client_t *client = mongoc_client_new("<connection-string>"); mongoc_client_set_structured_log_opts(client, log_opts); // Perform operation to generate logs bson_t *command = BCON_NEW("ping", BCON_INT32(1)); bson_t reply; bson_error_t error; mongoc_client_command_simple(client, "admin", command, NULL, &reply, &error); // Cleanup bson_destroy(command); bson_destroy(&reply); mongoc_structured_log_opts_destroy(log_opts); mongoc_client_destroy(client); mongoc_cleanup(); return 0; }
アプリケーションを実行し、 debug
レベルで接続に対してログを記録すると、接続を開く、使用する、閉じるたびにドライバーによってメッセージが表示されます。 次のコードは、このログ仕様の コマンドを示しています。
mongoc_structured_log_opts_t *log_opts = mongoc_structured_log_opts_new(); mongoc_structured_log_opts_set_max_level_for_all_components( log_opts, MONGOC_STRUCTURED_LOG_LEVEL_DEBUG); mongoc_structured_log_opts_set_handler(log_opts, debug_log_handler, NULL); // Create client with DEBUG logging enabled mongoc_client_t *client = mongoc_client_new("<connection-string>"); mongoc_client_set_structured_log_opts(client, log_opts);
debug
レベルのトレース機能が指定されている場合、接続を開いて使用すると、ドライバーは debug
のログメッセージを生成します。
bson_t *doc = BCON_NEW("x", BCON_INT32(1)); bson_error_t error; if (!mongoc_collection_insert_one(collection, doc, NULL, NULL, &error)) { fprintf(stderr, "Insert failed: %s\n", error.message); }
[2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool created topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool created topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool created topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool ready topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection checkout started topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection created topologyId="..." serverHost="..." serverPort=27017 driverConnectionId=1 ...
Cドライバーで他のログレベルを指定する方法の詳細については、 libmongoc APIドキュメントの「 レベルとコンポーネント 」を参照してください。
詳細情報
クライアントオプション設定の詳細については、 MongoDBへの接続 に関するガイドを参照してください。Cドライバーでの構造化ログの詳細については、libmongoc APIドキュメントの構造化ログを参照してください。