Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
C ドライバー

構造化ログ

このガイドでは、 Cドライバーを使用してアプリケーションの構造化ログを構成する方法を学習できます。ログ記録 を使用すると、ドライバー アクティビティの個別のイベントベースのログを表示できます。

ロガーは、指定可能な 重大度 または冗長のレベルでメッセージをログ。アプリケーションでのログ記録 を有効にすると、アプリケーションのアクティビティに関するさまざまな詳細レベルでの情報を受け取ることができます。ドライバーを使用すると、次の重大度レベルで分類された情報をログできます。

  • emergency

  • alert

  • critical

  • error

  • warn

  • notice

  • info

  • debug

  • trace

  • off

上記のリストは重大度レベルの低い順に並べられており、emergency が最も高い重大度レベルです。重大度レベルを指定すると、ドライバーはより高い重大度レベルを持つすべてのメッセージもログに記録します。例、ログレベルを critical に設定すると、ドライバーは emergencyalert の重大度レベルを持つメッセージもログします。

指定する重大度レベルが低いほど、ドライバーがログする情報が多くなり、アプリケーションのパフォーマンスに影響可能性があります。

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() 関数を使用して、クライアントまたはクライアントプールにロギング オプションを適用します

#include <mongoc/mongoc.h>
#include <stdio.h>
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ドキュメントの構造化ログを参照してください。

Tip

モニタリング

ロギングに加えて、アプリケーション内でモニタリングを有効にすることができます。詳しくは、クラスター モニタリングのガイドを参照してください。

戻る

エンタープライズ認証

項目一覧