Files
lst/app/src/pkg/logger/dbTransport.ts

43 lines
1.1 KiB
TypeScript

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);
}
}