Skip to content

Commit

Permalink
refactor: improve sql logging and slow query timeout
Browse files Browse the repository at this point in the history
  • Loading branch information
0-vortex committed Oct 13, 2022
1 parent 3782b21 commit 5385049
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 7 deletions.
1 change: 1 addition & 0 deletions src/app.module.ts
Expand Up @@ -62,6 +62,7 @@ import { DatabaseLoggerMiddleware } from "./common/middleware/database-logger.mi
],
synchronize: false,
logger: (new DatabaseLoggerMiddleware),
maxQueryExecutionTime: configService.get("db.maxQueryExecutionTime"),
}) as TypeOrmModuleOptions,
inject: [ConfigService],
}),
Expand Down
7 changes: 4 additions & 3 deletions src/common/middleware/database-logger.middleware.ts
@@ -1,5 +1,6 @@
import { Logger as TypeOrmLogger } from "typeorm";
import { Logger as NestLogger } from "@nestjs/common";
import { clc } from "@nestjs/common/utils/cli-colors.util";

export class DatabaseLoggerMiddleware implements TypeOrmLogger {
private readonly logger = new NestLogger("SQL");
Expand All @@ -13,15 +14,15 @@ export class DatabaseLoggerMiddleware implements TypeOrmLogger {
}

logQuerySlow (time: number, query: string, parameters?: unknown[]) {
this.logger.warn(`Time: ${time} -- Parameters: ${this.stringifyParameters(parameters)} -- ${query}`);
this.logger.error(`${query} -- Parameters: ${this.stringifyParameters(parameters)} ${clc.red(`+${String(time)}ms`)}`);
}

logMigration (message: string) {
this.logger.log(message);
this.logger.warn(message);
}

logSchemaBuild (message: string) {
this.logger.log(message);
this.logger.warn(message);
}

log (level: "log" | "info" | "warn", message: string) {
Expand Down
9 changes: 5 additions & 4 deletions src/common/middleware/http-logger.middleware.ts
Expand Up @@ -2,13 +2,14 @@ import { Injectable, Logger, NestMiddleware } from "@nestjs/common";
import { clc } from "@nestjs/common/utils/cli-colors.util";
import { Request, Response, NextFunction } from "express";

import { cliDuration } from "../util/cli-duration";

@Injectable()
export class HttpLoggerMiddleware implements NestMiddleware {
private logger = new Logger(`HTTP`);

use (request: Request, response: Response, next: NextFunction) {
const startTime = Date.now();
const getDuration = (text: string) => `${text} ${clc.yellow(`+${String(Date.now() - startTime)}ms`)}`;

response.on("finish", () => {
const { method, originalUrl } = request;
Expand All @@ -17,14 +18,14 @@ export class HttpLoggerMiddleware implements NestMiddleware {
const message = `${method} ${originalUrl} ${statusCode} ${statusMessage}`;

if (statusCode >= 500) {
return this.logger.error(getDuration(clc.red(message)));
return this.logger.error(cliDuration(startTime, clc.red(message)));
}

if (statusCode >= 400) {
return this.logger.warn(getDuration(clc.magentaBright(message)));
return this.logger.warn(cliDuration(startTime, clc.magentaBright(message)));
}

return this.logger.log(getDuration(message));
return this.logger.log(cliDuration(startTime, message));
});

next();
Expand Down
4 changes: 4 additions & 0 deletions src/common/util/cli-duration.ts
@@ -0,0 +1,4 @@
import { clc } from "@nestjs/common/utils/cli-colors.util";

export const cliDuration = (startTime: number, text: string) =>
`${text} ${clc.yellow(`+${String(Date.now() - startTime)}ms`)}`;
1 change: 1 addition & 0 deletions src/config/database.config.ts
Expand Up @@ -7,4 +7,5 @@ export default registerAs("db", () => ({
username: String(process.env.TYPEORM_USERNAME ?? "ospz-local"),
password: String(process.env.TYPEORM_PASSWORD ?? "UCN2zrH2WGxKck7tT2JG4MY6wbHkeX9s"),
database: String(process.env.TYPEORM_DATABASE ?? "ospz-local"),
maxQueryExecutionTime: Number(parseInt(process.env.TYPEORM_MAX_QUERY_EXECUTION_TIME ?? "2000", 10)),
}));

0 comments on commit 5385049

Please sign in to comment.