Visão geral
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.
Opções de registro
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.
Implementar registro
O seguinte bloco de código implementa o registro fazendo o seguinte:
Cria um tipo de
mongoc_structured_log_opts_t
para configurar o registroDefine 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()
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.
Informações adicionais
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.