refactor(logger): added in the db posting
This commit is contained in:
28
backend/src/db/schema/logs.schema.ts
Normal file
28
backend/src/db/schema/logs.schema.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import {
|
||||
boolean,
|
||||
jsonb,
|
||||
pgTable,
|
||||
text,
|
||||
timestamp,
|
||||
uuid,
|
||||
} from "drizzle-orm/pg-core";
|
||||
import { createInsertSchema, createSelectSchema } from "drizzle-zod";
|
||||
import type { z } from "zod";
|
||||
|
||||
export const logs = pgTable("logs", {
|
||||
id: uuid("id").defaultRandom().primaryKey(),
|
||||
level: text("level"),
|
||||
module: text("module").notNull(),
|
||||
subModule: text("subModule"),
|
||||
message: text("message").notNull(),
|
||||
stack: jsonb("stack").default([]),
|
||||
checked: boolean("checked").default(false),
|
||||
hostname: text("hostname"),
|
||||
createdAt: timestamp("createdAt").defaultNow(),
|
||||
});
|
||||
|
||||
export const logSchema = createSelectSchema(logs);
|
||||
export const newLogSchema = createInsertSchema(logs);
|
||||
|
||||
export type Log = z.infer<typeof logSchema>;
|
||||
export type NewLog = z.infer<typeof newLogSchema>;
|
||||
43
backend/src/logger/db.transport.ts
Normal file
43
backend/src/logger/db.transport.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import build from "pino-abstract-transport";
|
||||
import { db } from "../db/db.controller.js";
|
||||
import { logs } from "../db/schema/logs.schema.js";
|
||||
import { tryCatch } from "../utils/trycatch.utlis.js";
|
||||
|
||||
const pinoLogLevels: Record<number, string> = {
|
||||
10: "trace",
|
||||
20: "debug",
|
||||
30: "info",
|
||||
40: "warn",
|
||||
50: "error",
|
||||
60: "fatal",
|
||||
};
|
||||
|
||||
// Create a custom transport function
|
||||
export default async function () {
|
||||
//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.error(res.error);
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
console.error("Error inserting log into database:", err);
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,9 @@ const transport = pino.transport({
|
||||
destination: process.stdout.fd,
|
||||
},
|
||||
},
|
||||
{
|
||||
target: "./db.transport.ts",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user