Overview
En esta guía, aprenderá a configurar un registrador en el controlador de Node.js. El controlador le permite registrar información clasificada según los siguientes niveles de gravedad:
emergencyalertcriticalerrorwarnnoticeinfodebugtraceoff
La lista anterior está ordenada por nivel de gravedad decreciente. Al especificar un nivel de gravedad, también se registran todos los mensajes con niveles de gravedad más altos. Por ejemplo, si se establece el nivel de registro en critical, también se registran mensajes con niveles de gravedad de emergency y alert.
Cuanto menor sea el nivel de gravedad que especifique, más información registrará el controlador, lo que podría afectar el rendimiento de su aplicación.
Configuración
Puede configurar el registro en el controlador de Node.js sin modificar el código especificando variables de entorno. También puede configurarlo programáticamente especificando las opciones del cliente en el constructor MongoClient.
Nota
Debido a que las cadenas de conexión a menudo se comparten entre una implementación de diferentes aplicaciones que pueden tener diferente soporte de registro, no recomendamos usar una cadena de conexión para configurar el registro.
Variables de entorno
Puede configurar el registro para diferentes componentes del controlador especificando un nivel de gravedad en una o más de las siguientes variables de entorno:
MONGODB_LOG_ALL: Especifica la gravedad predeterminada para cualquier componente no configuradoMONGODB_LOG_COMMAND:Registra todos los comandos enviados al servidorMONGODB_LOG_TOPOLOGY:Registra cualquier cambio en la topología del clústerMONGODB_LOG_SERVER_SELECTION:Registra el proceso de selección del servidorMONGODB_LOG_CONNECTION: Registra todos los eventos del pool de conexionesMONGODB_LOG_CLIENT:Registra todos los eventos del cliente
Si no especifica ninguna de las variables de entorno anteriores, el controlador utiliza el valor de MONGODB_LOG_ALL, que si no se especifica, se establece implícitamente en off.
Tip
El registro a nivel de comandos es la opción que más rendimiento requiere debido a la frecuencia con la que se envían los comandos al servidor. Especifique esta opción solo si es necesario para depurar la aplicación.
El siguiente ejemplo establece el nivel de registro para todos los componentes en debug excepto MONGODB_LOG_COMMAND:
export MONGODB_LOG_ALL="debug" export MONGODB_LOG_COMMAND="off"
Ubicación de registro
Puede especificar si el controlador registra en stderr o stdout configurando la variable de entorno MONGODB_LOG_PATH en "stderr" o "stdout", como se muestra en el siguiente ejemplo:
export MONGODB_LOG_PATH="stderr"
De forma predeterminada, el controlador inicia sesión en stderr.
Longitud del documento
El controlador convierte los documentos registrados en cadenas mediante EJSON, lo que limita las cadenas a 1000 caracteres por defecto. Puede especificar una longitud máxima de documento para su registrador mediante la variable de entorno MONGODB_LOG_MAX_DOCUMENT. Establezca esta variable en 0 para no realizar el truncamiento.
El siguiente ejemplo establece la longitud máxima del documento en 500 caracteres:
export MONGODB_LOG_MAX_DOCUMENT_LENGTH=500
Opciones del cliente
Puede configurar el registro programáticamente especificando las opciones del cliente en el constructor MongoClient. Dado que las opciones del cliente prevalecen sobre las variables de entorno, especifíquelas en el cliente solo si ya no desea que el controlador responda a las variables de entorno.
Tip
Si su aplicación se basa en el formato stdout o stderr, recomendamos configurar el registro mediante las opciones del cliente para evitar conflictos con las variables de entorno del usuario de su aplicación.
Puede especificar para qué componente configurar el registro especificando una o más de las siguientes opciones de cliente:
default: Especifica la gravedad predeterminada para cualquier componente no configuradocommand:Registra todos los comandos enviados al servidortopology:Registra cualquier cambio en la topología del clústerserverSelection:Registra el proceso de selección del servidorconnection: Registra todos los eventos del pool de conexionesclient:Registra todos los eventos del cliente
Para especificar un nivel de registro para un componente, configure la opción mongodbLogComponentSeverities en un objeto que contenga el componente y el nivel de gravedad deseado. El siguiente ejemplo configura el nivel de registro para todos los componentes en debug, excepto para command:
const client = new MongoClient("<connection string>", { mongodbLogComponentSeverities: { default: "debug", command: "off" } });
Ubicación de registro
Puede especificar si el controlador inicia sesión en stderr o stdout configurando la opción mongodbLogPath en "stderr" o "stdout", como se muestra en el siguiente ejemplo:
const mongodbLogComponentSeverities = { default: "debug" }; const mongodbLogPath = "stdout"; const client = new MongoClient("<connection string>", { mongodbLogComponentSeverities, mongodbLogPath } );
De forma predeterminada, el controlador inicia sesión en stderr.
También puede especificar un destino de registro personalizado. El siguiente ejemplo crea un destino de registro personalizado:
import fs from 'node:fs/promises'; import util from 'node:util'; const mongodbLogPath = { file: await fs.open(`./server-${+new Date()}.logs`, 'w'), async write(log) { try { await this.file?.appendFile(util.inspect(log) + '\n'); } catch (fileError) { console.log('cannot log anymore', fileError); this.file = null; } } } const client = new MongoClient("<connection string>", { mongodbLogPath });
Si su función genera un error durante la operación de escritura, este error finaliza el registrador. Por ello, recomendamos gestionar los errores convirtiendo la función de escritura en una operación sin efecto en lugar de generar un error, como se muestra en el ejemplo anterior.
Nota
El registro puede agotar el espacio en disco si no se implementa un sistema de rotación de registros adecuado. Le recomendamos conectar su función de escritura personalizada a una biblioteca de registro popular.
Longitud del documento
El controlador convierte los documentos registrados en cadenas mediante EJSON, lo que limita las cadenas a 1000 caracteres por defecto. Puede especificar una longitud máxima de documento para su registrador con la opción mongodbLogMaxDocumentLength. Configure esta opción en 0 para no realizar truncamiento.
El siguiente ejemplo establece la longitud máxima del documento en 500 caracteres:
const mongodbLogComponentSeverities = { default: "debug" }; const mongodbLogLength = 500; const client = new MongoClient("<connection string>", { mongodbLogComponentSeverities, mongodbLogLength });
Información Adicional
Para obtener más información sobre la monitorización con el controlador Node.js, consulte la Guíade monitoreo.
Documentación de la API
Para obtener más información sobre cualquiera de las opciones o tipos analizados en esta guía, consulte la siguiente documentación de API: