feat(logger): added transport to post to db instead of file
This commit is contained in:
29
server/services/logger/dbTransport.ts
Normal file
29
server/services/logger/dbTransport.ts
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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}`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user