Overview
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 driver. Para aprender a utilizar la información sobre la actividad del driver en el código, consulte la guía Supervisió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.
Configura un registrador
Esta sección proporciona antecedentes sobre las dependencias necesarias para configurar un registrador y proporciona un ejemplo de configuración del registrador.
Segundo plano
El driver Java Reactive Streams utiliza Simple Logging Facade For Java (SLF4J). SLF4J le permite especificar su marco de registro preferido en el momento de la implementación. Para obtener más información sobre SLF4J, consulte la documentación de SLF4J.
La configuración de un registrador es opcional. Cuando inicia su aplicación, el driver de Java Reactive Streams busca el artefacto slf4j-api en su classpath. Si el driver no puede encontrar el artefacto slf4j-api, el driver utiliza java.util.logging para registrar la siguiente advertencia y desactiva todo 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-apiUn 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 binding es un fragmento de código que conecta el artefacto slf4j-api con un framework de logging. Seleccione una pestaña para aprender a configurar su logger:
Ejemplo - Configuración
Este ejemplo muestra cómo configurar su registrador 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.
Selecciona las instrucciones de Maven o Gradle según tu 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 por defecto de Logback es DEBUG. Para aprender a cambiar el nivel de registro del 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.
Configure su registrador
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.
Ejemplo - Configurar
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 framework Logback define los siguientes niveles de registro, ordenados de más urgente a 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.
Nombres de registradores
Su registrador utiliza nombres de registrador para ayudar a organizar diferentes eventos de registro. Los nombres de registrador son cadenas que forman una jerarquía. Un registrador es un antepasado de otro registrador si su nombre seguido de un "." es un prefijo del nombre del otro registrador. Por ejemplo, "grandparent" es un antepasado de "grandparent.parent", que es un antepasado 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 driver de Java Reactive Streams define los siguientes nombres de registrador para organizar diferentes eventos de registro en el driver:
org.mongodb.driver.authenticator: autenticaciónorg.mongodb.driver.client: eventos relacionados conMongoClientinstanciasorg.mongodb.driver.cluster: supervisión de implementaciones de MongoDBorg.mongodb.driver.connectionconexiones y agrupaciones de conexionesorg.mongodb.driver.connection.tls: TLS/SSLorg.mongodb.driver.operation: operaciones, incluido el registro relacionado con reintentos automáticosorg.mongodb.driver.protocol.commandcomandos enviados a y respuestas recibidas de implementaciones de MongoDBorg.mongodb.driver.urianálisis de cadena de conexiónorg.mongodb.driver.management: JMX (Java Management Extensions)
Ejemplo - Nombres
Este ejemplo muestra cómo cambiar el nivel de registro para un registrador de driver 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.
Ejemplo - Configuración
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.
Selecciona las instrucciones de Maven o Gradle según tu 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 por defecto de Log4j2 es ERROR. La ejecución de operaciones estándar en el driver de Java Reactive Streams no producirá resultados de Log4j2 sin configuración. Para aprender a cambiar el nivel de registro del registrador Log4j2, consulte el ejemplo en la sección Configurar su registrador de esta página.
Para obtener más información sobre Log4j2, consulta el Manual Log4j2.
Configure su registrador
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.
Nombres de registradores
Su registrador utiliza nombres de registrador para ayudar a organizar diferentes eventos de registro. Los nombres de registrador son cadenas que forman una jerarquía. Un registrador es un antepasado de otro registrador si su nombre seguido de un "." es un prefijo del nombre del otro registrador. Por ejemplo, "grandparent" es un antepasado de "grandparent.parent", que es un antepasado 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 driver de Java Reactive Streams define los siguientes nombres de registrador para organizar diferentes eventos de registro en el driver:
org.mongodb.driver.authenticator: autenticaciónorg.mongodb.driver.client: eventos relacionados conMongoClientinstanciasorg.mongodb.driver.cluster: supervisión de implementaciones de MongoDBorg.mongodb.driver.connectionconexiones y agrupaciones de conexionesorg.mongodb.driver.connection.tls: TLS/SSLorg.mongodb.driver.operation: operaciones, incluido el registro relacionado con reintentos automáticosorg.mongodb.driver.protocol.commandcomandos enviados a y respuestas recibidas de implementaciones de MongoDBorg.mongodb.driver.urianálisis de cadena de conexiónorg.mongodb.driver.management: JMX (Java Management Extensions)
Ejemplo - Nombres
Este ejemplo muestra cómo cambiar el nivel de registro para un registrador de driver 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:
<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>
Información Adicional
Para obtener más información sobre cómo configurar Log4j2, consulta la guía de configuración de Log4j2.oficial
Configuración de la conexión
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 |
|---|---|
| Establece la longitud máxima del documento, en caracteres, de un solo mensaje de registro Por defecto: |
Ejemplo
En este ejemplo, se nombra la aplicación que envía solicitudes y se especifica que el número máximo de caracteres para un solo mensaje de registro es de 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 ...
Información Adicional
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 de MongoClientSettings.Builder.