feat(logger): added transport to post to db instead of file

This commit is contained in:
2025-03-07 13:39:53 -06:00
parent ef26b6aa79
commit ce11b1f57e
2 changed files with 47 additions and 20 deletions

View File

@@ -0,0 +1,29 @@
import {db} from "../../../database/dbclient.js";
import {logs} from "../../../database/schema/logs.js";
import build from "pino-abstract-transport";
type Log = {
username: string | null;
service: string;
level: string;
msg: string;
};
// Create a custom transport function
export default async function (log: Log) {
//const {username, service, level, msg, ...extra} = log;
try {
return build(async function (source) {
for await (let obj of source) {
// Insert log entry into the PostgreSQL database using Drizzle ORM
await db.insert(logs).values({
level: obj.level,
username: obj?.username,
service: obj?.service,
message: obj.msg,
});
}
});
} catch (err) {
console.error("Error inserting log into database:", err);
}
}

View File

@@ -1,4 +1,4 @@
import {pino, type Logger} from "pino"; import {pino, type LogFn, type Logger} from "pino";
export let logLevel = "info"; export let logLevel = "info";
@@ -8,24 +8,20 @@ const transport = pino.transport({
target: "pino-pretty", target: "pino-pretty",
options: { options: {
colorize: true, colorize: true,
singleLine: true,
// customPrettifiers: { // customPrettifiers: {
// time: (timestamp) => `🕰 ${timestamp}`, // time: (time) => `🕰 ${time}`,
// }, // },
destination: process.stdout.fd, destination: process.stdout.fd,
}, },
}, },
{ {
target: "pino-pretty", target: "./dbTransport.js",
options: {
colorize: false,
destination: "./logs/logs.log",
mkdir: true,
},
}, },
], ],
}); });
export const log = pino( const log: Logger = pino(
{ {
level: process.env.LOG_LEVEL || logLevel, level: process.env.LOG_LEVEL || logLevel,
// formatters: { // formatters: {
@@ -33,20 +29,22 @@ export const log = pino(
// return {level: label.toUpperCase()}; // return {level: label.toUpperCase()};
// }, // },
// }, // },
customLevels: {death: 70}, //customLevels: {death: 70},
// removes data from the logs that we dont want to be shown :D // removes data from the logs that we dont want to be shown :D
redact: {paths: ["email", "password"], remove: true}, redact: {paths: ["email", "password"], remove: true},
}, },
transport transport
); );
// setTimeout(() => { export const createLog = (
// const fun = () => { level: "info" | "fatal" | "error" | "warn" | "debug" | "trace",
// throw Error("Just an error"); username: string,
// }; service: string,
// try { message: string
// fun(); ) => {
// } catch (error) { if (level in log) {
// log.error(error, "Somethingbad"); log[level]({username, service}, message);
// } } else {
// }); log.warn({username, service}, `Invalid log level '${level}', falling back to warn: ${message}`);
}
};