Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Exploração madeireira

Neste guia, você aprenderá como:

  • Configure um logger usando o Simple Logging Facade For Java (SLF4J)

  • Configurar o nível de registro do seu logger

Este guia mostra como gravar eventos no driver. Para saber como usar informações sobre a atividade do driver no código, consulte o guia Monitoramento.

Importante

Biblioteca do Reator do Projeto

Este guia usa a biblioteca Project Reactor para consumir instâncias do Publisher retornadas pelos métodos de driver Java Reactive Streams. Para saber mais sobre a biblioteca do Projeto Reactor e como usá-la, consulte Introdução na documentação do Reactor.

Esta seção fornece informações básicas sobre as dependências necessárias para definir um criador de logs e fornece um exemplo de definição do criador de logs.

O driver Java Reactive Streams usa o Simple Logging Facade For Java (SLF4J). O SLF4J permite que você especifique sua estrutura de registro preferida no momento da implementação. Para obter mais informações sobre o SLF4J, consulte a documentação do SLF J.4

Configurar um registrador é opcional. Quando você inicia seu aplicação, o driver Java Reactive Streams procura o artefato slf4j-api em seu caminho de classe. Se o driver não conseguir localizar o artefato slf4j-api, ele usará java.util.logging para registrar o seguinte aviso e desabilitará todos os registros adicionais:

WARNING: SLF4J not found on the classpath. Logging is disabled for the 'org.mongodb.driver' component

Para definir um logger, você deve incluir o seguinte em seu projeto:

  • O artefato slf4j-api

  • Uma estrutura de registro

  • Uma vinculação

Observação

Para as estruturas de registro mais populares, há frequentemente um único artefato de ligação que lista o slf4j-api e a estrutura de registro como dependências. Isso significa que você pode configurar um registrador adicionando um artefato à lista de dependência do seu projeto. Você verá isso no exemplo abaixo.

Um vínculo é um pedaço de código que conecta o artefato do slf4j-api a uma estrutura de registro. Selecione uma guia para saber como definir e configurar seu registrador:

Este exemplo mostra como configurar seu registrador Logback.

Dica

Versões de dependência

As seguintes versões são ilustrativas em vez de uma fonte da verdade. Verifique a documentação oficial do SLF4J e sua estrutura de registro de escolha para obter informações de versão atualizadas garantidas.

Selecione as instruções Maven ou Gradle com base em sua ferramenta de construção:

Maven

Adicione a seguinte dependência ao seu arquivo pom.xml :

<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
</dependencies>

Gradle

Adicione a seguinte dependência ao seu arquivo build.gradle :

dependencies {
implementation 'ch.qos.logback:logback-classic:1.2.11'
}

Depois de incluir a dependência anterior, conecte-se à sua instância do MongoDB e use o código a seguir para recuperar um documento:

MongoClient mongoClient = MongoClients.create("<connection URI>");
MongoDatabase database = mongoClient.getDatabase("<database>");
MongoCollection<Document> collection = database.getCollection("<collection>");
Flux.from(collection.find()).blockFirst();

Você deverá ver uma saída semelhante à seguinte:

...
12:14:55.853 [main] DEBUG org.mongodb.driver.connection - Opened connection [connectionId{localValue:3, serverValue:3}] to <MongoDB hostname>
12:14:55.861 [main] DEBUG org.mongodb.driver.protocol.command - Command "find" started on database <database> using a connection with driver-generated ID 3 and server-generated ID 3 to <MongoDB hostname>. The request ID is 5. Command: {"find": "<collection>", "filter": {}, "limit": 1, "singleBatch": true, "$db": "<database>", "lsid": {"id": {"$binary": {"base64": "<_id>", "subType": "04"}}}, "$readPreference": {"mode": "primaryPreferred"}}
12:14:55.864 [main] DEBUG org.mongodb.driver.protocol.command - Command "find" succeeded in 4.34 ms using a connection with driver-generated ID 3 and server-generated ID 3 to <MongoDB hostname>. The request ID is 5. Command reply: {"cursor": {"id": 0, "ns": "<database>.<collection>", "firstBatch": []}, "ok": 1.0, "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1673778535, "i": 1}}, "signature": {"hash": {"$binary": {"base64": "<_id>", "subType": "00"}}, "keyId": 0}}, "operationTime": {"$timestamp": {"t": 1673778535, "i": 1}}}

Observação

Nível de registro padrão

O nível de log padrão do Logback é DEBUG. Para saber como alterar o nível de log do registrador do Logback, veja o exemplo nesta página na seção Como configurar seu registrador.

Para obter mais informações sobre Logback, consulte o manual de Logback.

Para configurar seu registrador, você deve usar o sistema de configuração da estrutura de registro vinculada ao SLF4J.

O exemplo a seguir mostra como você pode usar o sistema de configuração da estrutura de registro para definir o nível de registro do registrador.

O nível de log de um logger especifica um limite inferior para determinar a urgência necessária para que o logger emita essa mensagem.

Este exemplo mostra como configurar o nível de log do seu logger para INFO.

Especifique as configurações do Logback em um arquivo chamado logback.xml. Você não precisa criar seu arquivo logback.xml em um local específico, mas você deve conseguir acessá-lo a partir do seu classpath.

A estrutura Logback define os seguintes níveis de registro, ordenados do mais urgente para o menos urgente:

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

Insira o seguinte código no seu arquivo logback.xml:

<configuration>
<appender name="CONSOLE"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger{30} - %msg%n
</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>

Para testar se a configuração do seu registrador está correta, execute o seguinte código:

MongoClient mongoClient = MongoClients.create("<connection URI>");
MongoDatabase database = mongoClient.getDatabase("<database>");
MongoCollection<Document> collection = database.getCollection("<collection>");
Flux.from(collection.find()).blockFirst();

Você deverá ver uma saída semelhante à seguinte:

...
1317 [cluster-ClusterId{value='<your cluster id>', description='null'}-<your connection uri>] INFO org.mongodb.driver.cluster - Discovered replica set primary <your connection uri>
1568 [main] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:7, serverValue:<server value>}] to <your connection uri>

Para obter mais informações sobre como configurar o Logback, consulte o Manual do Logback.

Seu logger usa nomes de loggers para ajudar a organizar diferentes eventos de logger. Os nomes de logger são strings que formam uma hierarquia. Um logger é um ancestral de outro logger se seu nome seguido por um "." for um prefixo do nome do outro logger. Por exemplo, "grandparent" é um ancestral de "grandparent.parent", que é um ancestral de "grandparent.parent.child".

Como exemplo prático, veja como uma hierarquia de loggers se apresenta no código:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
Logger logger_parent = LoggerFactory.getLogger("parent");
Logger logger_child = LoggerFactory.getLogger("parent.child");

Um logger herda as propriedades de seu logger ancestral e pode definir as suas próprias. É possível pensar nisso como algo semelhante à herança de classes em Java.

O driver Java Reactive Streams define os seguintes nomes de registradores para organizar diferentes eventos de registro no driver:

  • org.mongodb.driver.authenticator: Autenticação

  • org.mongodb.driver.client: Eventos relacionados a instâncias de MongoClient

  • org.mongodb.driver.cluster: Monitoramento das implementações do MongoDB

  • org.mongodb.driver.connection: Conexões e pools de conexões

  • org.mongodb.driver.connection.tls: TLS/SSL

  • org.mongodb.driver.operation: Operações, incluindo registro relacionado a novas tentativas automáticas

  • org.mongodb.driver.protocol.command: Comandos enviados e respostas recebidas de sistemas MongoDB

  • org.mongodb.driver.uri: Análise de connection string

  • org.mongodb.driver.management: Extensões de gerenciamento Java (JMX)

Este exemplo mostra como alterar o nível de registro de um registrador de driver específico. O exemplo define o registrador raiz como OFF e o registrador org.mongodb.driver.connection como INFO. Isso faz com que o aplicação registre somente mensagens relacionadas à conexão com uma instância MongoDB .

Insira o seguinte código no seu arquivo logback.xml:

<configuration>
<appender name="CONSOLE"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger{30} - %msg%n
</pattern>
</encoder>
</appender>
<logger name="org.mongodb.driver.connection" level="INFO" additivity="true"/>
<root level="OFF">
<appender-ref ref="CONSOLE" />
</root>
</configuration>

Para testar se a configuração do seu registrador está correta, execute o seguinte código:

MongoClient mongoClient = MongoClients.create("<connection URI>");
MongoDatabase database = mongoClient.getDatabase("<database>");
MongoCollection<Document> collection = database.getCollection("<collection>");
Flux.from(collection.find()).blockFirst();

Você deverá ver uma saída semelhante à seguinte:

...
829 [cluster-rtt-ClusterId{value='<some value>', description='null'}-<your connection URI>] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:2, serverValue:<your server value>}] to <your connection uri>
977 [main] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:7, serverValue:<your server value>}] to <your connection uri>

Para mais informações sobre como configurar o Logback, consulte o guia oficial de configuração do Logback.

Este exemplo mostra como configurar seu registrador Log4j.

Dica

Versões de dependência

As seguintes versões são ilustrativas em vez de uma fonte da verdade. Verifique a documentação oficial do SLF4J e sua estrutura de registro de escolha para obter informações de versão atualizadas garantidas.

Selecione as instruções Maven ou Gradle com base em sua ferramenta de construção:

Maven

Adicione a seguinte dependência ao seu arquivo pom.xml :

<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
</dependency>
</dependencies>

Gradle

Adicione a seguinte dependência ao seu arquivo build.gradle :

dependencies {
implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1'
}

Depois de incluir a dependência anterior, use o seguinte código para registrar um erro:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
Logger logger = LoggerFactory.getLogger("MyApp");
logger.error("Logging an Error");

Você deverá ver uma saída semelhante à seguinte:

12:35:00.438 [main] ERROR <my package path> - Logging an Error

Observação

Nível de registro padrão

O nível de registro padrão do Log4j2 é ERRO. A execução de operações padrão no driver Java Reactive Streams não produzirá saída do Log4j2 sem configuração. Para saber como alterar seu42 nível de registro do registrador j, consulte o exemplo na seção Configurar seu registrador desta página.

Para obter mais informações sobre o Log4j2, consulte o manual do Log4j2.

Para configurar seu registrador, você deve usar o sistema de configuração da estrutura de registro vinculada ao SLF4J.

O exemplo a seguir mostra como você pode usar o sistema de configuração da estrutura de registro para definir o nível de registro do registrador.

O nível de log de um logger especifica um limite inferior para determinar a urgência necessária para que o logger emita essa mensagem.

Seu logger usa nomes de loggers para ajudar a organizar diferentes eventos de logger. Os nomes de logger são strings que formam uma hierarquia. Um logger é um ancestral de outro logger se seu nome seguido por um "." for um prefixo do nome do outro logger. Por exemplo, "grandparent" é um ancestral de "grandparent.parent", que é um ancestral de "grandparent.parent.child".

Como exemplo prático, veja como uma hierarquia de loggers se apresenta no código:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
Logger logger_parent = LoggerFactory.getLogger("parent");
Logger logger_child = LoggerFactory.getLogger("parent.child");

Um logger herda as propriedades de seu logger ancestral e pode definir as suas próprias. É possível pensar nisso como algo semelhante à herança de classes em Java.

O driver Java Reactive Streams define os seguintes nomes de registradores para organizar diferentes eventos de registro no driver:

  • org.mongodb.driver.authenticator: Autenticação

  • org.mongodb.driver.client: Eventos relacionados a instâncias de MongoClient

  • org.mongodb.driver.cluster: Monitoramento das implementações do MongoDB

  • org.mongodb.driver.connection: Conexões e pools de conexões

  • org.mongodb.driver.connection.tls: TLS/SSL

  • org.mongodb.driver.operation: Operações, incluindo registro relacionado a novas tentativas automáticas

  • org.mongodb.driver.protocol.command: Comandos enviados e respostas recebidas de sistemas MongoDB

  • org.mongodb.driver.uri: Análise de connection string

  • org.mongodb.driver.management: Extensões de gerenciamento Java (JMX)

Este exemplo mostra como alterar o nível de registro de um registrador de driver específico. O exemplo define o registrador raiz como OFF e o registrador org.mongodb.driver.connection como INFO. Isso faz com que o aplicação registre somente mensagens relacionadas à conexão com uma instância MongoDB .

Insira o seguinte código no seu arquivo log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="org.mongodb.driver.connection" level="INFO"/>
<Root level="OFF">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

Para testar se a configuração do seu registrador está correta, execute o seguinte código:

MongoClient mongoClient = MongoClients.create("<connection URI>");
MongoDatabase database = mongoClient.getDatabase("<database>");
MongoCollection<Document> collection = database.getCollection("<collection>");
Flux.from(collection.find()).blockFirst();

Você deverá ver uma saída semelhante à seguinte:

...
15:40:23.005 [cluster-ClusterId{value='<some value>', description='null'}-<your connection uri>] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:3, serverValue:<your server value>}] to <your connection uri>
15:40:23.159 [main] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:7, serverValue:<your server value>}] to <your connection uri>

Para obter mais informações sobre como configurar o Log4j2, consulte o guia de configuração oficial do Log4J2.

Você pode aplicar configurações de registro à sua instância do MongoClient utilizando os métodos applyToLoggerSettings() e applicationName().

A tabela a seguir descreve os métodos que você pode conectar às configurações do registrador para modificar o comportamento do registro:

Método
Descrição

maxDocumentLength()

Define o tamanho máximo do documento , em caracteres, de uma única mensagem de registro

Padrão: 1000

Este exemplo nomeia o aplicação que envia solicitações e especifica que o número máximo de caracteres para uma única mensagem de registro é 5000 caracteres.

MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyConnectionString(
new ConnectionString("<connection URI>"))
.applicationName("<application name>")
.applyToLoggerSettings(builder ->
builder.maxDocumentLength(5000))
.build());
Flux.from(mongoClient.listDatabaseNames())
.doOnNext(System.out::println)
.blockLast();

Você deverá ver uma saída semelhante à seguinte:

01:20:38.782 [main] INFO org.mongodb.driver.client -- MongoClient with
metadata {"application": {"name": "<application name>"}, ...,
loggerSettings=LoggerSettings{maxDocumentLength=5000}, ... timeoutMS=null}
...
01:20:41.022 [main] DEBUG org.mongodb.driver.protocol.command -- Command
"listDatabases" succeeded ... Command reply: {"databases": [...], ...}
01:20:41.024 [main] DEBUG org.mongodb.driver.connection -- Connection checked in: address=<address>, driver-generated ID=6
myDb
sample_airbnb
sample_analytics
...

Para obter mais informações sobre as configurações de conexão descritas nesta seção, consulte a documentação da API MongoClientSettings.Builder.