Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Driver C

Registro estruturado

Neste guia, você pode aprender como usar o driver C para configurar o registro estruturado para seu aplicação. O registro permite que você visualize um registro discreto e baseado em eventos das atividades do motorista.

Os registradores registram mensagens em um nível de gravidade ou verbosidade que você pode especificar. Ao ativar o login no seu aplicação, você pode receber informações sobre as atividades do seu aplicativo em diferentes níveis de detalhamento. O driver permite que você registre informações categorizadas nos seguintes níveis de gravidade:

  • emergency

  • alert

  • critical

  • error

  • warn

  • notice

  • info

  • debug

  • trace

  • off

A lista anterior é ordenada por nível de gravidade decrescente, com emergency como o nível de gravidade mais alto. Quando você especifica um nível de gravidade, o driver também registra todas as mensagens com níveis de gravidade mais altos. Por exemplo, se você definir o nível de registro como critical, o driver também registrará mensagens com os níveis de gravidade emergency e alert.

Quanto menor o nível de gravidade especificado, mais informações o driver registra, o que pode impacto o desempenho do seu aplicação.

Dica

Para saber mais sobre os níveis de gravidade de registro, consulte o verbete da Wikipedia sobre o padrão do Syslog para registro de mensagens.

As configurações de registro estruturado são rastreadas explicitamente por uma instância mongoc_structured_log_opts_t . O driver C usa as configurações padrão de variáveis de ambiente e oferece configuração programática opcional adicional. Use mongoc_structured_log_opts_new() para especificar variáveis de ambiente. Para saber mais sobre mongoc_structured_log_opts_t o, consulte mongoc_structurad_log_opts_t na documentação da API do libmongoc.

Normalmente, as variáveis de ambiente fornecem padrões que podem ser substituídos programaticamente. Para solicitar o comportamento oposto, onde seus padrões programáticos podem ser substituídos pelo ambiente, utilize a função mongoc_structured_log_opts_set_max_levels_from_env(). As mensagens de registro estruturadas podem ser filtradas de forma arbitrária pelo manipulador, mas, tanto para uma otimização de desempenho quanto para uma conveniência, um filtro integrado limita o nível máximo de registro de mensagens relatadas com uma configuração por componente. Para saber mais sobre o mongoc_structured_log_opts_set_max_levels_from_env(), consulte mongoc_estruturad_log_opts_set_max_levels_from_env() na documentação da API libmongoc.

O seguinte bloco de código implementa o registro fazendo o seguinte:

  • Cria um tipo de mongoc_structured_log_opts_t para configurar o registro

  • Define o nível de registro desejado como INFO

  • Fornece uma função de manipulador para processar mensagens de registro

  • Aplica as opções de registro ao seu cliente ou pool de cliente usando a função 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;
}

Se você executar seu aplicativo e fizer registro de conexões no nível debug , o driver emitirá mensagens sempre que você abrir, usar e fechar uma conexão. O seguinte código mostra o comando para esta especificação de registro:

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);

Com o rastreamento de nível debug especificado, quando você abre e usa uma conexão, o driver gera debug mensagens de registro:

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
...

Para saber mais sobre como especificar outros níveis de registro no driver C, consulte Níveis e componentes na documentação da API libmongoc.

Para saber mais sobre como definir opções de cliente, consulte o guia sobre Conectar ao MongoDB. Para saber mais sobre registro estruturado no driver C, consulte Registro estruturado na documentação da API libmongoc.

Dica

Monitoramento

Além do registro, você pode habilitar o monitoramento em seu aplicação. Para saber mais, consulte os guias de monitoramento de cluster.

Voltar

Autenticação empresarial

Nesta página