From 5c37de40c686b5d8f25dceaac8f4dbefb7e9fa9d Mon Sep 17 00:00:00 2001 From: Roland Schneider Date: Wed, 29 Oct 2025 09:15:20 +0100 Subject: [PATCH] add custom logger --- src/app.module.ts | 9 ++++++++- src/logger/dvbooking-logger.service.ts | 24 ++++++++++++++++++++++++ src/logger/logger.module.ts | 9 +++++++++ src/main.ts | 2 ++ src/user/user.service.ts | 8 ++++++++ 5 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/logger/dvbooking-logger.service.ts create mode 100644 src/logger/logger.module.ts diff --git a/src/app.module.ts b/src/app.module.ts index 6c2ed4d..85aee95 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -8,6 +8,7 @@ import { AuthModule } from './auth/auth.module'; import { User } from './entity/user'; import { UserGroup } from './entity/user-group'; import { UserRole } from './entity/user-role'; +import { LoggerModule } from './logger/logger.module'; const moduleTypeOrm = TypeOrmModule.forRootAsync({ imports: [ConfigModule], @@ -28,7 +29,13 @@ const moduleTypeOrm = TypeOrmModule.forRootAsync({ }); @Module({ - imports: [ConfigModule.forRoot(), moduleTypeOrm, UserModule, AuthModule], + imports: [ + ConfigModule.forRoot(), + moduleTypeOrm, + UserModule, + AuthModule, + LoggerModule, + ], controllers: [AppController], providers: [AppService], }) diff --git a/src/logger/dvbooking-logger.service.ts b/src/logger/dvbooking-logger.service.ts new file mode 100644 index 0000000..bebafb6 --- /dev/null +++ b/src/logger/dvbooking-logger.service.ts @@ -0,0 +1,24 @@ +import { ConsoleLogger, Injectable } from '@nestjs/common'; + +@Injectable() +export class DvbookingLoggerService extends ConsoleLogger { + log(message: string, context?: string) { + super.log(message, context); + } + + error(message: string, trace?: string, context?: string) { + super.error(message, trace, context); + } + + warn(message: string, context?: string) { + super.warn(message, context); + } + + debug(message: string, context?: string) { + super.debug(message, context); + } + + verbose(message: string, context?: string) { + super.verbose(message, context); + } +} diff --git a/src/logger/logger.module.ts b/src/logger/logger.module.ts new file mode 100644 index 0000000..ec53ac5 --- /dev/null +++ b/src/logger/logger.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { DvbookingLoggerService } from './dvbooking-logger.service'; + +@Global() +@Module({ + providers: [DvbookingLoggerService], + exports: [DvbookingLoggerService], +}) +export class LoggerModule {} diff --git a/src/main.ts b/src/main.ts index f76bc8d..209961e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,8 +1,10 @@ import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; +import { DvbookingLoggerService } from './logger/dvbooking-logger.service'; async function bootstrap() { const app = await NestFactory.create(AppModule); + app.useLogger(app.get(DvbookingLoggerService)); await app.listen(process.env.PORT ?? 3000); } bootstrap(); diff --git a/src/user/user.service.ts b/src/user/user.service.ts index b8a0bba..ab9af0c 100644 --- a/src/user/user.service.ts +++ b/src/user/user.service.ts @@ -4,19 +4,23 @@ import { Repository } from 'typeorm'; import { User } from '../entity/user'; import * as bcrypt from 'bcrypt'; import { FindOptionsRelations } from 'typeorm/find-options/FindOptionsRelations'; +import { DvbookingLoggerService } from '../logger/dvbooking-logger.service'; @Injectable() export class UserService { constructor( @InjectRepository(User) private usersRepository: Repository, + private readonly logger: DvbookingLoggerService, ) {} findAll(): Promise { + this.logger.log('Finding all users', 'UserService'); return this.usersRepository.find(); } findOne(id: number): Promise { + this.logger.log(`Finding user with id: ${id}`, 'UserService'); return this.usersRepository.findOneBy({ id }); } @@ -24,10 +28,12 @@ export class UserService { username: string, relations: FindOptionsRelations, ): Promise { + this.logger.log(`Finding user with username: ${username}`, 'UserService'); return this.usersRepository.findOne({ where: { username }, relations }); } async create(user: Partial): Promise { + this.logger.log('Creating a new user', 'UserService'); if (user.password) { user.password = await bcrypt.hash(user.password, 12); } @@ -36,6 +42,7 @@ export class UserService { } async update(id: number, user: Partial): Promise { + this.logger.log(`Updating user with id: ${id}`, 'UserService'); if (user.password) { user.password = await bcrypt.hash(user.password, 12); } @@ -44,6 +51,7 @@ export class UserService { } async remove(id: number): Promise { + this.logger.log(`Removing user with id: ${id}`, 'UserService'); await this.usersRepository.delete(id); } }