import build from "pino-abstract-transport"; import { db } from "../db/db.js"; import { type Log, logs } from "../db/schema/logs.js"; import { tryCatch } from "../utils/tryCatch.js"; const pinoLogLevels: any = { 10: "trace", 20: "debug", 30: "info", 40: "warn", 50: "error", 60: "fatal", }; // Create a custom transport function export default async function (log: Log) { //const {username, service, level, msg, ...extra} = log; try { return build(async (source) => { for await (const obj of source) { // convert to the name to make it more easy to find later :P const levelName = pinoLogLevels[obj.level] || "unknown"; const res = await tryCatch( db.insert(logs).values({ level: levelName, module: obj?.module?.toLowerCase(), subModule: obj?.subModule?.toLowerCase(), hostname: obj?.hostname?.toLowerCase(), message: obj.msg, stack: obj?.stack, }), ); if (res.error) { console.log(res.error); } } }); } catch (err) { console.error("Error inserting log into database:", err); } }