import crossFetch from "cross-fetch"; import { nomeVariavel } from "./variaveisComuns"; const LOKI_BASE_URL = "https://log.idz.one"; const LOKI_ENDPOINT = "/loki/api/v1/push"; export const postLogger = async ({ objeto, }) => { const response = await crossFetch(`${LOKI_BASE_URL}${LOKI_ENDPOINT}`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(objeto), }).catch((a) => a); if (!response.ok) { return [objeto, `Erro ${response.status}: ${await response?.text?.()}`]; } return [objeto]; }; let cwd = ""; /** define a localização da pasta do projeto */ export const defineCwd = (novoCwd) => { cwd = novoCwd; }; export const logger = ({ app: app_e, eProducao, parametros: parametrosAmbiente }) => ({ inquilino, usuario, parametros: parametrosSessao }) => async (level, mensagem, op_tipoLog) => { let { __filename, detalhes, local, parametros: parametrosLog, } = op_tipoLog || {}; const app = `${eProducao ? "" : "DEV-"}${app_e}`; if (cwd && __filename) { __filename = __filename.replace(cwd, ""); } if (local) { detalhes = [`${nomeVariavel({ local })}="${local}"`, ...(detalhes || [])]; } if (__filename) { detalhes = [ `${nomeVariavel({ __filename })}="${__filename}"`, ...(detalhes || []), ]; } const timestamp = `${Date.now()}000000`; const mainLog = detalhes?.length ? `${mensagem} | ${detalhes.map((d) => JSON.stringify(d)).join(" | ")}` : mensagem; const payload = { stream: { app, inquilino, usuario, level, ...(parametrosAmbiente || {}), ...(parametrosSessao || {}), ...(parametrosLog || {}), }, values: [ [ timestamp, mainLog, // Linha de log direta ], ], }; const objeto = { streams: [payload] }; const response = await postLogger({ objeto }); return response; };