Skip to content

Commit a7ddb2a

Browse files
committed
feat(be): logger module
1 parent 997e8c3 commit a7ddb2a

File tree

3 files changed

+90
-1
lines changed

3 files changed

+90
-1
lines changed

apps/backend/src/enums/log.enum.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,9 @@ export enum LogMessage {
99
IMPORT_STOPS = "Import stops",
1010
REST = "REST",
1111
GRAPHQL = "GraphQL",
12-
GRAPHQL_INTROSPECTION = "GraphQL - Introspection Query",
12+
}
13+
14+
export enum RestLogStatus {
15+
SUCCESS = "SUCCESS",
16+
INVALID_REQUEST = "INVALID_REQUEST",
1317
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { Global, Module } from "@nestjs/common";
2+
3+
import { LoggerService } from "src/modules/logger/logger.service";
4+
5+
@Global()
6+
@Module({
7+
controllers: [],
8+
providers: [LoggerService],
9+
exports: [LoggerService],
10+
})
11+
export class LoggerModule {}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import { ConsoleLogger, Injectable, Scope } from "@nestjs/common";
2+
import { Prisma } from "@prisma/client";
3+
4+
import { LogMessage, LogType, RestLogStatus } from "src/enums/log.enum";
5+
import { PrismaService } from "src/modules/prisma/prisma.service";
6+
7+
@Injectable({ scope: Scope.TRANSIENT })
8+
export class LoggerService extends ConsoleLogger {
9+
private prisma = new PrismaService();
10+
11+
constructor() {
12+
super();
13+
}
14+
15+
async error(message: string, trace: string): Promise<void> {
16+
try {
17+
await this.prisma.log.create({
18+
data: {
19+
type: LogType.ERROR,
20+
message,
21+
trace,
22+
},
23+
});
24+
} catch (error) {
25+
super.error("Failed to log error", error);
26+
}
27+
28+
super.error(message, trace);
29+
}
30+
31+
async createLog(
32+
type: LogType,
33+
message: LogMessage,
34+
trace:
35+
| Prisma.NullableJsonNullValueInput
36+
| Prisma.InputJsonValue = Prisma.JsonNull,
37+
): Promise<void> {
38+
try {
39+
await this.prisma.log.create({
40+
data: {
41+
type,
42+
message,
43+
trace,
44+
},
45+
});
46+
} catch (error) {
47+
super.error("Failed to log error", error);
48+
}
49+
}
50+
51+
async createRestLog(
52+
endpoint: string,
53+
duration: number,
54+
querySearch: Record<string, string | string[]> | null = null,
55+
): Promise<void> {
56+
await this.createLog(LogType.INFO, LogMessage.REST, {
57+
endpoint,
58+
duration,
59+
status: RestLogStatus.SUCCESS,
60+
querySearch,
61+
});
62+
}
63+
64+
async createRestErrorLog(
65+
endpoint,
66+
querySearch: Record<string, string | string[]> | null = null,
67+
): Promise<void> {
68+
await this.createLog(LogType.INFO, LogMessage.REST, {
69+
endpoint,
70+
status: RestLogStatus.INVALID_REQUEST,
71+
querySearch,
72+
});
73+
}
74+
}

0 commit comments

Comments
 (0)