Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Registro

En esta guía, aprenderás a:

  • Configura un registrador usando Simple Logging Facade For Java (SLF4J)

  • Configura el nivel de registro de tu logger

Esta guía muestra cómo registrar eventos en el controlador. Para aprender a usar la información sobre la actividad del controlador en el código, consulte la guía de monitorización.

Importante

Proyecto Reactor librería

Esta guía utiliza la librería Proyecto Reactor para consumir instancias de Publisher devueltas por los métodos del driver Java Reactive Streams. Para obtener más información sobre la librería Project Reactor y cómo utilizarla, consulta comenzar en la documentación de Reactor.

Esta sección proporciona antecedentes sobre las dependencias necesarias para configurar un registrador y proporciona un ejemplo de configuración del registrador.

El controlador Java Reactive Streams utiliza la fachada Simple Logging Facade For Java (SLF4J). SLF4J permite especificar el marco de registro preferido durante la implementación. Para obtener más información sobre SLF4J, consulte la documentación de SLF J.4

Configurar un registrador es opcional. Al iniciar la aplicación, el controlador Java Reactive Streams busca el artefacto slf4j-api en el classpath. Si el controlador no encuentra el artefacto slf4j-api, utiliza java.util.logging para registrar la siguiente advertencia y desactiva el registro posterior:

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

Para configurar un logger, debe incluir lo siguiente en su proyecto:

  • El artefacto slf4j-api

  • Un framework de registro

  • Un enlace

Nota

Para los marcos de registro más populares, a menudo existe un único artefacto vinculante que enumera slf4j-api y el marco de registro como dependencias. Esto significa que puedes configurar un logger agregando un artefacto a la lista de dependencias de tu proyecto. Verás esto en el siguiente ejemplo.

Un enlace es un fragmento de código que conecta el artefacto slf4j-api con un marco de registro. Seleccione una pestaña para aprender cómo configurar su registrador:

Este ejemplo muestra cómo configurar el registrador de eventos Logback.

Tip

Versiones de dependencias

Las siguientes versiones son ilustrativas en lugar de una fuente de verdad. Consulta la documentación oficial de SLF4J y el marco de registro de tu elección para obtener información garantizada y actualizada sobre las versiones.

Seleccione las instrucciones de Maven o Gradle según su herramienta de compilación:

Maven

Agrega la siguiente dependencia a tu archivo pom.xml:

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

Gradle

Agrega la siguiente dependencia a tu archivo build.gradle:

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

Una vez que hayas añadido la dependencia anterior, conéctate a tu instancia de MongoDB y utiliza el siguiente código para recuperar un documento:

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

Debes ver un resultado que se asemeje al siguiente:

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

Nota

Nivel de registro por defecto

El nivel de registro predeterminado de Logback es DEBUG. Para saber cómo cambiar el nivel de registro de su registrador Logback, consulte el ejemplo en la sección «Configurar su registrador» de esta página.

Para obtener más información sobre Logback, consulta el manual de Logback.

Para configurar tu registrador, debes utilizar el sistema de configuración del framework de registro vinculado a SLF4J.

El siguiente ejemplo muestra cómo se puede usar el sistema de configuración del marco de trabajo de registro para establecer el nivel de registro del registrador.

El nivel de registro de un logger indica el umbral mínimo de urgencia que debe tener un mensaje para que el logger lo emita.

Este ejemplo muestra cómo configurar el nivel de registro de tu logger a INFO.

Especifica configuraciones de Logback en un archivo llamado logback.xml. No necesitas crear tu archivo logback.xml en una ubicación específica, pero debes poder acceder a él desde tu classpath.

El marco de Logback define los siguientes niveles de registro, ordenados del más urgente al menos urgente:

  • Error

  • ADVERTENCIA

  • información

  • DEBUG

  • TRACE

Inserta el siguiente código en tu archivo 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 comprobar que la configuración del logger fue exitosa, ejecuta el siguiente código:

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

Debes ver un resultado que se asemeje al siguiente:

...
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 obtener más información sobre la configuración de Logback, consulte el Manual de Logback.

El registrador utiliza nombres para organizar los diferentes eventos de registro. Estos nombres son cadenas de caracteres que forman una jerarquía. Un registrador es antecesor de otro si su nombre, seguido de ".", es un prefijo del nombre del otro registrador. Por ejemplo, "grandparent" es antecesor de "grandparent.parent", que a su vez es antecesor de "grandparent.parent.child".

Por ejemplo, esto es lo que parece una jerarquía de registradores en el código:

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

Un logger hereda las propiedades de su logger antecesor y puede definir las suyas propias. Puede considerar esto similar a la herencia de clase en Java.

El controlador Java Reactive Streams define los siguientes nombres de registradores para organizar los diferentes eventos de registro en el controlador:

  • org.mongodb.driver.authenticatorAutenticación

  • org.mongodb.driver.client: Eventos relacionados con MongoClient instancias

  • org.mongodb.driver.cluster: Monitoreo de implementaciones de MongoDB

  • org.mongodb.driver.connectionConexiones y grupos de conexiones

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

  • org.mongodb.driver.operation: Operaciones, incluido el registro relacionado con los reintentos automáticos

  • org.mongodb.driver.protocol.commandComandos enviados a implementaciones de MongoDB y respuestas recibidas de las mismas.

  • org.mongodb.driver.uri: Análisis de la cadena de conexión

  • org.mongodb.driver.managementExtensiones de administración de Java (JMX)

Este ejemplo muestra cómo cambiar el nivel de registro para un registrador de controlador específico. El ejemplo establece el registrador raíz en OFF y el registrador org.mongodb.driver.connection en INFO. Esto hace que la aplicación registre solo los mensajes relacionados con la conexión a una instancia de MongoDB.

Inserta el siguiente código en tu archivo 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 comprobar que la configuración del logger fue exitosa, ejecuta el siguiente código:

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

Debes ver un resultado que se asemeje al siguiente:

...
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 más información sobre cómo configurar Logback, consulte la guía oficial de configuración de Logback.

Este ejemplo muestra cómo configurar su registrador Log4j.

Tip

Versiones de dependencias

Las siguientes versiones son ilustrativas en lugar de una fuente de verdad. Consulta la documentación oficial de SLF4J y el marco de registro de tu elección para obtener información garantizada y actualizada sobre las versiones.

Seleccione las instrucciones de Maven o Gradle según su herramienta de compilación:

Maven

Agrega la siguiente dependencia a tu archivo pom.xml:

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

Gradle

Agrega la siguiente dependencia a tu archivo build.gradle:

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

Una vez que haya incluido la dependencia anterior, utilice el siguiente código para registro de un error:

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

Debes ver un resultado que se asemeje al siguiente:

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

Nota

Nivel de registro por defecto

El nivel de registro predeterminado de Log4j2 es ERROR. Al ejecutar operaciones estándar en el controlador Java Reactive Streams, no se generará ninguna salida en Log4j2 sin configuración. Para saber cómo cambiar el42 nivel de registro de Log j, consulte el ejemplo en la sección «Configurar el registrador» de esta página.

Para obtener más información sobre Log4j2, consulta el Manual Log4j2.

Para configurar tu registrador, debes utilizar el sistema de configuración del framework de registro vinculado a SLF4J.

El siguiente ejemplo muestra cómo se puede usar el sistema de configuración del marco de trabajo de registro para establecer el nivel de registro del registrador.

El nivel de registro de un logger indica el umbral mínimo de urgencia que debe tener un mensaje para que el logger lo emita.

El registrador utiliza nombres para organizar los diferentes eventos de registro. Estos nombres son cadenas de caracteres que forman una jerarquía. Un registrador es antecesor de otro si su nombre, seguido de ".", es un prefijo del nombre del otro registrador. Por ejemplo, "grandparent" es antecesor de "grandparent.parent", que a su vez es antecesor de "grandparent.parent.child".

Por ejemplo, esto es lo que parece una jerarquía de registradores en el código:

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

Un logger hereda las propiedades de su logger antecesor y puede definir las suyas propias. Puede considerar esto similar a la herencia de clase en Java.

El controlador Java Reactive Streams define los siguientes nombres de registradores para organizar los diferentes eventos de registro en el controlador:

  • org.mongodb.driver.authenticatorAutenticación

  • org.mongodb.driver.client: Eventos relacionados con MongoClient instancias

  • org.mongodb.driver.cluster: Monitoreo de implementaciones de MongoDB

  • org.mongodb.driver.connectionConexiones y grupos de conexiones

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

  • org.mongodb.driver.operation: Operaciones, incluido el registro relacionado con los reintentos automáticos

  • org.mongodb.driver.protocol.commandComandos enviados a implementaciones de MongoDB y respuestas recibidas de las mismas.

  • org.mongodb.driver.uri: Análisis de la cadena de conexión

  • org.mongodb.driver.managementExtensiones de administración de Java (JMX)

Este ejemplo muestra cómo cambiar el nivel de registro para un registrador de controlador específico. El ejemplo establece el registrador raíz en OFF y el registrador org.mongodb.driver.connection en INFO. Esto hace que la aplicación registre solo los mensajes relacionados con la conexión a una instancia de MongoDB.

Inserta el siguiente código en tu archivo 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 comprobar que la configuración del logger fue exitosa, ejecuta el siguiente código:

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

Debes ver un resultado que se asemeje al siguiente:

...
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 obtener más información sobre cómo configurar Log4j2, consulta la guía de configuración de Log4j2.oficial

Puedes aplicar la configuración de registro a tu instancia MongoClient utilizando los métodos applyToLoggerSettings() y applicationName().

La siguiente tabla describe los métodos que puedes encadenar a tus configuraciones del registrador para modificar el comportamiento del registro:

Método
Descripción

maxDocumentLength()

Establece la longitud máxima del documento, en caracteres, de un solo mensaje de registro

Por defecto: 1000

Este ejemplo nombra la aplicación que envía las solicitudes y especifica que el número máximo de caracteres para un solo mensaje de registro es 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();

Debes ver un resultado que se asemeje al siguiente:

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 obtener más información sobre la configuración de conexión descrita en esta sección, consulte la documentación de la API MongoClientSettings.Builder.