Skip to content

Commit eaedb98

Browse files
authored
Merge pull request #30 from internxt/feat/add-pino-logger
[_] feat(logger): add pino logger with abstraction
2 parents f172e70 + 5d2874a commit eaedb98

File tree

6 files changed

+220
-8
lines changed

6 files changed

+220
-8
lines changed

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,12 @@
4141
"cross-env": "^7.0.3",
4242
"helmet": "^8.1.0",
4343
"jsonwebtoken": "^9.0.2",
44+
"nestjs-pino": "^4.4.0",
4445
"passport": "^0.7.0",
4546
"passport-jwt": "^4.0.1",
4647
"pg": "^8.14.1",
48+
"pino-http": "^10.5.0",
49+
"pino-pretty": "^13.1.1",
4750
"reflect-metadata": "^0.2.2",
4851
"rxjs": "^7.8.1",
4952
"sequelize": "^6.37.6",

src/app.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { SequelizeModule, SequelizeModuleOptions } from '@nestjs/sequelize';
77
import { format } from 'sql-formatter';
88
import { UserModule } from './modules/user/user.module';
99
import { WebhookModule } from './modules/webhook/webhook.module';
10+
import { LoggerModule } from './common/logger/logger.module';
1011

1112
const defaultDbConfig = (
1213
configService: ConfigService,
@@ -49,6 +50,7 @@ const defaultDbConfig = (
4950
load: [configuration],
5051
isGlobal: true,
5152
}),
53+
LoggerModule,
5254
SequelizeModule.forRootAsync({
5355
imports: [ConfigModule],
5456
inject: [ConfigService],

src/common/logger/logger.module.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { Global, Module } from '@nestjs/common';
2+
import { LoggerModule as PinoLoggerModule } from 'nestjs-pino';
3+
import { Request } from 'express';
4+
import { AppLoggerService } from './pino-logger.service';
5+
6+
const isDevelopment = process.env.NODE_ENV === 'development';
7+
8+
@Global()
9+
@Module({
10+
imports: [
11+
PinoLoggerModule.forRoot({
12+
pinoHttp: {
13+
level: isDevelopment ? 'debug' : 'info',
14+
transport: isDevelopment
15+
? {
16+
target: 'pino-pretty',
17+
options: {
18+
colorize: true,
19+
singleLine: false,
20+
ignore: 'pid,hostname',
21+
messageFormat: '{context} {msg}',
22+
errorLikeObjectKeys: ['err', 'error'],
23+
},
24+
}
25+
: undefined,
26+
formatters: {
27+
level: (label: string) => ({ level: label }),
28+
},
29+
serializers: {
30+
req: (req: Request) => ({
31+
id: req.id,
32+
}),
33+
res: undefined,
34+
},
35+
autoLogging: false,
36+
},
37+
}),
38+
],
39+
providers: [AppLoggerService],
40+
exports: [AppLoggerService],
41+
})
42+
export class LoggerModule {}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { Injectable, LoggerService } from '@nestjs/common';
2+
import { Logger } from 'nestjs-pino';
3+
4+
@Injectable()
5+
export class AppLoggerService extends Logger implements LoggerService {}

src/main.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,18 @@ import {
88
import configuration from './config/configuration';
99
import helmet from 'helmet';
1010
import { NestExpressApplication } from '@nestjs/platform-express';
11-
import { ConsoleLogger } from '@nestjs/common';
11+
import { AppLoggerService } from './common/logger/pino-logger.service';
1212

1313
const config = configuration();
1414
const APP_PORT = config.port || 3000;
1515

1616
async function bootstrap() {
1717
const app = await NestFactory.create<NestExpressApplication>(AppModule, {
18-
logger: new ConsoleLogger({
19-
colors: config.isDevelopment,
20-
prefix: 'meet-server',
21-
compact: config.isProduction,
22-
}),
18+
bufferLogs: true,
2319
});
2420

21+
app.useLogger(app.get(AppLoggerService));
22+
2523
app.enableCors();
2624
app.use(helmet());
2725
app.disable('x-powered-by');

0 commit comments

Comments
 (0)