Tengo un servicio que usa la clase contenedora para el registrador de Winston para registrar las llamadas HTTP, fallas internas, etc. para poder mantener el servicio en producción.
el comportamiento del registro es algo como esto
function getUser(req, res, next) { try { logger.info("user::api::getUser", "controller called"); // do some stuff here, call the service related and return response } catch(err) { logger.error("user::api::getUser", err); } }y también se llama a este registrador en todas las funciones posteriores junto con la aplicación, como servicios, capas de acceso a la base de datos, controladores, middleware, etc.
En realidad, estoy decepcionado por llamar al logger en cada función que escribo, lo que siento que contamina el código y no hago single responsibility principle also makes the code violates . tiene que pasar por todas las funciones que el registrador usó dentro y actualizarlo a la nueva sintaxis que no es buena
Pensé si puedo usar eventos controlados, me refiero a emisores de eventos para emitir eventos en cada falla, llamar y los controladores de estos eventos escribirán el registro apropiado
por ejemplo algo como esto
function getUser(req, res, next) { try { eventEmitter("info", "controller called"); // do some stuff here, call the service related and return response } catch(err) { eventEmitter.emit("error", err); } }y aquí está el oyente
eventEmitter.on("error", (err) => { logger.error("error", err); });Veo que esta sintaxis oculta la implementación de llamar al registrador en una función en lugar de llamarlo en cada parte de la aplicación, pero aún así, las funciones están contaminadas porque todavía tengo que llamar al emisor de eventos dentro de ellas para emitir el evento de registro
¡No sé si hay una forma inteligente de implementar el registro sin llamar al registrador en cada parte de la aplicación como esta! Además, me pregunto cómo las empresas gigantes manejan estos casos en sus aplicaciones.
Espero que alguien me responda y me guíe en la dirección correcta.