Overview
En esta guía, puedes aprender cómo configurar y ajustar un registrador en el controlador Kotlin Sync.
Esta guía muestra cómo registrar eventos en el driver. Si quieres aprender cómo usar la información sobre la actividad del driver en el código, consulta el Guía Supervisar eventos de la aplicación.
Configurar un registrador
El controlador Kotlin Sync utiliza Simple Logging Facade For Java (SLF4J) para permitirte especificar el marco de registro de tu elección. Para más información sobre SLF4J, ver el SLF4Documentación J.
Configurar un registrador es opcional. Para configurar un registrador, debes incluir lo siguiente en tu proyecto:
La
slf4j-apiartefacto en su classpathUn framework de registro
Un vínculo que conecta el artefacto
slf4j-apia un framework de registros
Si el driver no puede encontrar el artefacto slf4j-api en tu classpath, el driver muestra 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
Ejemplo de configuración del Logger
El siguiente ejemplo muestra cómo configurar un registrador. Selecciona el Logback o Log4j2 pestaña para ver la sintaxis correspondiente:
Selecciona la pestaña Maven o Gradle para aprender cómo configurar Logback con la herramienta de gestión de dependencias de tu proyecto:
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>
Agrega la siguiente dependencia a tu archivo build.gradle.
dependencies { implementation 'ch.qos.logback:logback-classic:1.2.11' }
Una vez que haya incluido la dependencia anterior, conéctese a su instancia de MongoDB y recupere un documento con el siguiente código:
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
El código anterior generará un mensaje similar al siguiente:
... 12:14:55.833 [main] DEBUG org.mongodb.driver.connection - Checkout started for connection to <MongoDB hostname> 12:14:55.834 [main] DEBUG org.mongodb.driver.connection - Connection created: address=<MongoDB hostname>, driver-generated ID=3 12:14:55.836 [main] DEBUG org.mongodb.driver.connection - Connection ready: address=<MongoDB hostname>, driver-generated ID=3, established in=4 ms 12:14:55.843 [main] DEBUG org.mongodb.driver.connection - Connection checked out: address=<MongoDB hostname>, driver-generated ID=3, duration=9 ms
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 logger Logback, consulta la sección Configurar nivel de registro de esta página.
Selecciona la pestaña Maven o Gradle para aprender a configurar Log4j2 con la herramienta de gestión de dependencias del proyecto.
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>
Agrega la siguiente dependencia a tu archivo build.gradle.
dependencies { implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1' }
Una vez que hayas incluido la dependencia anterior, registra un registro de error usando el siguiente código:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; ... val logger = LoggerFactory.getLogger("MyApp"); logger.error("Logging an Error");
El código anterior generará un mensaje similar 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. Esto significa que ejecutar operaciones estándar en el controlador de sincronización de Kotlin no producirá salida de Log4J2 sin configuración. Para aprender cómo cambiar el nivel de registro de tu logger Log4J2, consulta la sección Configuración del nivel de registro de esta página.
Configurar nivel de registro
Puedes configurar el nivel de registro de tu logger utilizando el sistema de configuración del marco de registro vinculado a SLF4J. El nivel de registro especifica un límite inferior para cuán urgente debe ser un mensaje para que el registrador lo saque como salida.
Ejemplo de configuración de Logger
El siguiente ejemplo configura el nivel de registro en INFO. Seleccione la pestaña Logback o Log4j2 para ver la sintaxis correspondiente:
Especifique las configuraciones de Logback en un archivo llamado logback.xml. Debe poder acceder a este archivo desde su classpath.
El framework Logback define los siguientes niveles de registros, ordenados de más urgente a menos urgente:
ERRORWARNINFODEBUGTRACE
Establece tu archivo logback.xml como el siguiente:
<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:
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
Este código produce una salida que se asemeja a lo siguiente:
... 317 [main] INFO org.mongodb.driver.client - MongoClient with metadata {"driver": {"name": "<driver-name>", "version": "<driver-version>"}, "os": {"type": "<os-type>", "name": "<os-name>", "architecture": "<architecture>", "version": "<os-version>"}, "platform": "<platform-info>"} created with settings <MongoClientSettings> 345 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server with description ServerDescription{address=<MongoDB hostname>, type=<server-type>, cryptd=false, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=<max-wire-version>, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=<round-trip-nanos>, minRoundTripTimeNanos=<min-round-trip-nanos}
Especifique las configuraciones de Log4j2 en un archivo llamado log4j2.xml Debe poder acceder a este archivo desde su classpath.
El marco Log4j2 define los siguientes niveles de registro, ordenados del más urgente al menos urgente:
FATALERRORWARNINFODEBUGTRACEALL
Establece tu archivo log4j2.xml como el siguiente:
<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> <Root level="INFO"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
Para comprobar que la configuración del logger fue exitosa, ejecuta el siguiente código:
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
Este código produce una salida que se asemeja a lo siguiente:
... 21:19:25.696 [main] INFO org.mongodb.driver.client - MongoClient with metadata {"driver": {"name": "<driver-name>", "version": "<driver-version>"}, "os": {"type": "<os-type>", "name": "<os-name>", "architecture": "<architecture>", "version": "<os-version>"}, "platform": "<platform-info>"} created with settings <MongoClientSettings> 21:19:25.710 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server with description ServerDescription{address=<MongoDB hostname>, type=<server-type>, cryptd=false, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=<max-wire-version>, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=<round-trip-nanos>, minRoundTripTimeNanos=<min-round-trip-nanos}
Nombres de registradores
Su registrador utiliza nombres de registrador para organizar los diferentes eventos de registro. Los nombres de registrador son cadenas que forman una jerarquía. Un registrador es ancestro de otro si su nombre seguido de "." prefija el nombre del otro. Por ejemplo, "grandparent" es ancestro de "grandparent.parent", que a su vez es ancestro de "grandparent.parent.child". Un registrador hereda las propiedades de su ancestro y también puede definir sus propias propiedades.
El controlador de Synchronization de Kotlin define los siguientes nombres de registrador para organizar diferentes eventos de registro:
Nombre del registrador | Descripción |
|---|---|
| Registra eventos de autenticación |
| Registra eventos relacionados con instancias de MongoClient |
| Registra eventos relacionados con la supervisión de las implementaciones de MongoDB |
| Registra conexiones y pool de conexiones |
| Registra eventos TLS |
| Registra operaciones, incluyendo registros relacionados con reintentos automáticos |
| Registra los comandos enviados y las respuestas recibidas de las implementaciones de MongoDB |
| Registra eventos de análisis de cadenas de conexión |
| Registra eventos de Java Management Extensions (JMX) |
Ejemplo de nombre de Logger
El siguiente ejemplo desactiva el registrador raíz y establece el nivel de registro para el registrador org.mongodb.driver.connection en DEBUG. Esto hará que el driver registre solo mensajes relacionados con conexiones y pool de conexiones en el nivel DEBUG o superior. Selecciona la pestaña Logback o Log4j2 para ver la sintaxis correspondiente:
Establece tu archivo logback.xml como el siguiente:
<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="DEBUG" additivity="true"/> <root level="OFF"> <appender-ref ref="CONSOLE" /> </root> </configuration>
Para probar que la configuración del registrador fue exitosa, ejecutar el siguiente código.
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
Este código produce una salida similar a la siguiente.
... 255 [main] DEBUG org.mongodb.driver.connection - Connection pool created for <MongoDB hostname> using options <connection-pool-options> 301 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] DEBUG org.mongodb.driver.connection - Connection pool ready for <MongoDB hostname> 321 [main] DEBUG org.mongodb.driver.connection - Checkout started for connection to <MongoDB hostname> 323 [main] DEBUG org.mongodb.driver.connection - Connection created: address=<MongoDB hostname>, driver-generated ID=3 335 [main] DEBUG org.mongodb.driver.connection - Connection ready: address=<MongoDB hostname>, driver-generated ID=3, established in=<connect-duration> ms 336 [main] DEBUG org.mongodb.driver.connection - Connection checked out: address=<MongoDB hostname>, driver-generated ID=3, duration=<checkout-duration> ms 363 [main] DEBUG org.mongodb.driver.connection - Connection checked in: address=<MongoDB hostname>, driver-generated ID=3
Establece tu archivo log4j2.xml como el siguiente:
<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="DEBUG"/> <Root level="OFF"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
Para probar que la configuración del registrador fue exitosa, ejecutar el siguiente código.
val mongoClient = MongoClient.create(<connection uri>); val database = mongoClient.getDatabase(<database>); val collection = database.getCollection<Document>(<collection>); collection.find().first();
Este código produce una salida que se asemeja a lo siguiente:
... 21:27:17.035 [main] DEBUG org.mongodb.driver.connection - Connection pool created for <MongoDB hostname> using options <connection-pool-options> 21:27:17.058 [cluster-ClusterId{value='<cluster-id>', description='null'}-<MongoDB hostname>] DEBUG org.mongodb.driver.connection - Connection pool ready for <MongoDB hostname> 21:27:17.064 [main] DEBUG org.mongodb.driver.connection - Checkout started for connection to <MongoDB hostname> 21:27:17.069 [main] DEBUG org.mongodb.driver.connection - Connection created: address=<MongoDB hostname>, driver-generated ID=3 21:27:17.075 [main] DEBUG org.mongodb.driver.connection - Connection ready: address=<MongoDB hostname>, driver-generated ID=3, established in=<connect-duration> ms 21:27:17.075 [main] DEBUG org.mongodb.driver.connection - Connection checked out: address=<MongoDB hostname>, driver-generated ID=3, duration=<checkout-duration> ms 21:27:17.086 [main] DEBUG org.mongodb.driver.connection - Connection checked in: address=<MongoDB hostname>, driver-generated ID=3
Información Adicional
Para obtener más información sobre las capacidades de registro de MongoDB, consulte Mensajes de registro en el manual del servidor MongoDB.
Para obtener información completa sobre los marcos de registro analizados en esta guía, consulte la siguiente documentación externa: