Overview
En esta guía, aprenderá a usar el controlador de Rust para configurar el seguimiento y el registro de su aplicación. El seguimiento y el registro son dos marcos para supervisar su aplicación. El registro le permite ver un registro discreto basado en eventos de las actividades del controlador, mientras que el seguimiento proporciona una vista continua.
En el controlador de Rust, las funciones de seguimiento y registro no difieren mucho. Sin embargo, al habilitar el seguimiento, el controlador emite mensajes en un formato más estructurado, lo que facilita que la aplicación consuma mensajes de eventos mediante programación.
Los rastreadores y registradores registran los mensajes con un nivel de severidad o nivel de detalle que usted puede especificar. Al habilitar uno de estos componentes en su aplicación, puede recibir información sobre las actividades de su aplicación con diferentes niveles de detalle.
Tip
Para aprender más sobre los niveles de gravedad del registro, consulte la entrada de Wikipedia sobre el Estándar Syslog para el registro de mensajes.
Habilitar rastreo y registro
El controlador implementa la caja de seguimiento para permitirle emitir mensajes para eventos del controlador.
Importante
El caja de tracing es inestable
Debido a que el tracing La caja no tiene una versión 1.0 publicada, puedes considerar que la funcionalidad es inestable.
Para habilitar el rastreo, el registro o ambos, debes agregar la dependencia tracing y la bandera de funcionalidad tracing-unstable a tu dependencia mongodb en tu archivo Cargo.toml:
[dependencies] tracing = "0.1.37" [dependencies.mongodb] version = "3.5.2" features = ["tracing-unstable"]
La siguiente tabla describe los componentes sobre los que puedes enviar eventos y sus respectivos objetivos:
Componente | Objetivo | Descripción |
|---|---|---|
Comando |
| Los eventos describen los comandos enviados a la base de datos y si tienen éxito o fallan. |
Selección de servidores |
| Los eventos describen el proceso del controlador de seleccionar un servidor en una implementación de MongoDB. |
Conexión |
| Los eventos describen el comportamiento de los pools de conexiones del driver y las conexiones que contienen. |
Para especificar el componente de registro y el nivel de gravedad, puedes establecer la variable de entorno RUST_LOG cuando compiles y ejecutes tu aplicación. Especifique el componente de registros configurando el valor de RUST_LOG en uno de los destinos proporcionados en la tabla anterior e incluyendo un nivel de gravedad.
El siguiente código muestra un comando para ejecutar un programa que registra eventos de conexión en el nivel debug:
$ RUST_LOG='mongodb::connection=debug' cargo run
Las siguientes secciones describen cómo consumir eventos utilizando ya sea seguimiento o registro.
Implementar seguimiento
Para habilitar el rastreo, también debes agregar la dependencia tracing-subscriber a tu archivo Cargo.toml. El siguiente código muestra una lista de dependencias de muestra que contiene las dependencias del driver y la caja tracing-subscriber:
[dependencies] tracing = "0.1.37" tracing-subscriber = "0.3.17" [dependencies.mongodb] version = "3.5.2" features = ["tracing-unstable"]
Luego, en tu aplicación, debes registrar un tipo que implemente el rasgo tracing::Subscriber para consumir eventos con rastreo. El siguiente código muestra cómo registrar un suscriptor de trazabilidad que utiliza las especificaciones de la variable de entorno RUST_LOG:
tracing_subscriber::fmt::init();
Tip
Para obtener más información sobre la inscripción de un suscriptor, consulta la documentaciónde tracing.
Si ejecutas tu aplicación y rastreas los comandos a nivel de debug, el controlador emite mensajes cada vez que ejecutas una operación. El siguiente código muestra el comando para esta especificación de rastreo:
$ RUST_LOG='mongodb::command=debug' cargo run
Al especificar la trazabilidad de nivel debug, al realizar una operación de escritura, el driver genera mensajes de traza:
let my_coll = client.database("db").collection("test_coll"); my_coll.insert_one(doc! { "x" : 1 }).await?;
2023-07-21T17:37:13.587794Z DEBUG mongodb::command: Command started topologyId="..." command="{\"insert\":\"test_coll\", ...}" databaseName="test" commandName="insert" requestId=12 driverConnectionId=1 serverConnectionId=133839 serverHost="..." serverPort=27017 2023-07-21T17:37:13.630401Z DEBUG mongodb::command: Command succeeded topologyId="..." reply="{\"n\":1, ...}" commandName="insert" requestId=12 driverConnectionId=1 serverConnectionId=133839 serverHost="..." serverPort=27017 durationMS=42
Implementar registro
Para habilitar el registro, también debes añadir el indicador de funcionalidad log o log-always a la dependencia tracing en tu archivo Cargo.toml. También debe añadir una dependencia para una caja de registro, como env_logger:
[dependencies] tracing = { version = "0.1.37", features = ["log"] } env_logger = "0.10.0" [dependencies.mongodb] version = "3.5.2" features = ["tracing-unstable"]
Tip
Para obtener más información sobre las banderas log y log-always, consulta la tracing documentación.
Para obtener más información sobre la caja de registro de terceros env_logger, consulta su documentación.
Luego, en su aplicación, debe registrar un registrador global para consumir eventos con registro de eventos. El siguiente código muestra cómo registrar un logger que utiliza las especificaciones de la variable de entorno RUST_LOG:
env_logger::init();
Tip
Configuraciones de registro alternativas
Para ver ejemplos de otras formas de configurar el registrador, visita el env_logger repositorio de GitHub.
Si ejecutas tu aplicación y el registro contra conexiones en el nivel debug, el controlador emite mensajes cada vez que abres, usas y cierras una conexión. El siguiente código muestra el comando para esta especificación de registro:
$ RUST_LOG='mongodb::connection=debug' cargo run
Con la trazabilidad al nivel debug especificada, cuando abres y utilizas una conexión, el controlador genera mensajes de registro:
let my_coll = client.database("db").collection("test_coll"); my_coll.insert_one(doc! { "x" : 1 }).await?;
[2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool created topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool created topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool created topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool ready topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection checkout started topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection created topologyId="..." serverHost="..." serverPort=27017 driverConnectionId=1 ...
Información Adicional
Para obtener más información sobre cómo configurar las opciones del cliente, consulte la guía en Opciones de conexión.