@cubos/logs
v1.0.0
Published
Este módulo ficará responsável por registrar os logs da sua aplicação de forma assíncrona.
Downloads
8
Readme
@cubos/logs
Este módulo ficará responsável por registrar os logs da sua aplicação de forma assíncrona.
Uso (com MongoDB)
No entrypoint do seu projeto, crie uma nova instancia do Logger utilizando o transport de sua escolha:
import { Logger, MongoDB } from "@cubos/logs";
import { create, inject } from "@cubos/utils";
import { MongoClient } from "mongodb";
// aqui uma instância do Logger é criada utilizando o MongoDB como provider
inject(create(Logger).using(MongoDB).getDependency(new MongoClient(env.MONGO_URL))).
A instância criada poderá ser obtida utilizando o tsyringe:
// A instancia ficará disponível através do token 'Logger'
const logger = container.resolve(Logger);
logger.log("api", { message: "hello world" });
Porém é possível registrar tokens alternativos, o que é útil quando se faz necessário utilizar múltiplas instâncias:
import { Logger, MongoDB, Console } from "@cubos/logs";
import { MongoClient } from "mongodb";
inject(
create(MongoDB).using(MongoDB).getDependency(new MongoClient(env.MONGO_URL)),
create(Console).using(Console).getDependency(),
);
const loggerMongo = container.resolve(MongoDB);
const loggerConsole = container.resolve(Console);
Tipos de logs
// o log de tipo "api" salvará os logs na collection "api-calls", recomenda-se utilizá-lo para requisiçoes que serão recebidas pelo seus controllers
logger.log("api", { message: "hello world" });
// o log de tipo "external" salvará os logs na collection "external-calls", recomenda-se salvar aqui chamadas http para serviços externos
const external: ExternalAPICallLog = {...}
logger.log("external", external);
Middleware do sdkgen
Para facilitar a integração com o sdkgen o Logger disponibiliza o método sdkgenMiddleware():
Exemplo:
const logger = container.resolve(Logger);
export const sdkgenConfig = {
controllers: [UserController, EpisodeController],
port: Number(process.env.PORT ?? 8000),
middlewares: [showErrorForFatalRequests, logger.sdkgenMiddleware],
};
As chamadas capturadas por este middleware serão do tipo api.
Axios Interceptor
Para facilitar a integração com o Axios o Logger disponibiliza propriedade axiosInterceptor que possui duas funções request e response que podem ser registradas como interceptor na sua instância do axios:
axiosInstance.interceptors.request.use(logger.axiosInterceptor.request);
axiosInstance.interceptors.response.use(logger.axiosInterceptor.response);
As chamadas capturadas por este interceptor serão do tipo external.