Skip to content

Commit

Permalink
added LoggerService interface, added docs
Browse files Browse the repository at this point in the history
  • Loading branch information
OG-NI committed Apr 28, 2024
1 parent b3fc471 commit fab0232
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 7 deletions.
54 changes: 54 additions & 0 deletions backend/docs/logging.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Logging

Die Logging-Funktionen werden durch das Interface `LoggerService` abstrahiert. Dadurch kann später einfacher zu einem anderen Logger gewechselt werden. Aktuell wird der von NestJS bereitgestellte `ConsoleLogger` (<https://docs.nestjs.com/techniques/logger>) verwendet. Dieser erfüllt das `LoggerService` Interface.

## Logging Level

Es werden vier Logging Level unterstützt, um unterschiedliche Dringlichkeitsstufen zu repräsentieren:

- **log**: allgemeine Informationen
- **error**: Fehler
- **warn**: Warnungen
- **debug**: Informationen zur Fehlerbehebung

## Beispiel

Im Modul wird der Logger Service als Provider registriert. Dabei kann mit dem Parameter `useClass` die konkrete Implementierung gewählt werden.

```ts
import { ConsoleLogger, Module } from '@nestjs/common';
import { ExampleController } from './example.controller';
import { LOGGER_SERVICE } from './logger/logger.service';

@Module({
controllers: [ExampleController],
providers: [
{
useClass: ConsoleLogger,
provide: LOGGER_SERVICE,
},
],
})
export class ExampleModule {}
```

In z.B. einem Controller kann dann durch Dependency Injection auf den Logger zugegriffen werden. Dafür wird dieser als Parameter im Konstruktor übergeben und mit dem `@Inject`-Decorator versehen.

```ts
import { Controller, Get, Inject } from '@nestjs/common';
import { LOGGER_SERVICE, LoggerService } from './logger/logger.service';

@Controller()
export class ExampleController {
constructor(
@Inject(LOGGER_SERVICE)
private readonly loggerService: LoggerService,
) {}

@Get('/example')
getExample(): string {
this.loggerService.log('example log message');
return 'example';
}
}
```
7 changes: 4 additions & 3 deletions backend/src/app.controller.spec.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import { ConsoleLogger } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerService } from './logger/logger.service';

describe('AppController', () => {
let appController: AppController;
let logger: ConsoleLogger;
let loggerService: LoggerService;
let appService: AppService;

beforeEach(async () => {
appService = new AppService();
logger = new ConsoleLogger();
appController = new AppController(appService, logger);
loggerService = new ConsoleLogger();
appController = new AppController(appService, loggerService);
});

describe('getPing', () => {
Expand Down
8 changes: 5 additions & 3 deletions backend/src/app.controller.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { ConsoleLogger, Controller, Get } from '@nestjs/common';
import { Controller, Get, Inject } from '@nestjs/common';
import { AppService } from './app.service';
import { LOGGER_SERVICE, LoggerService } from './logger/logger.service';

@Controller()
export class AppController {
constructor(
private readonly appService: AppService,
private readonly logger: ConsoleLogger,
@Inject(LOGGER_SERVICE)
private readonly loggerService: LoggerService,
) {}

/**
Expand All @@ -14,7 +16,7 @@ export class AppController {
*/
@Get('/ping')
getPing(): string {
this.logger.log('ping');
this.loggerService.log('ping');
return this.appService.getPing();
}
}
9 changes: 8 additions & 1 deletion backend/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,17 @@ import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AuthModule } from './auth/auth.module';
import { UserController } from './api/user/user.controller';
import { LOGGER_SERVICE } from './logger/logger.service';

@Module({
imports: [AuthModule],
controllers: [AppController, UserController],
providers: [AppService, ConsoleLogger],
providers: [
AppService,
{
useClass: ConsoleLogger,
provide: LOGGER_SERVICE,
},
],
})
export class AppModule {}
8 changes: 8 additions & 0 deletions backend/src/logger/logger.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export const LOGGER_SERVICE = 'LOGGER_SERVICE';

export interface LoggerService {
log(message: string): void;
error(message: string): void;
warn(message: string): void;
debug(message: string): void;
}

0 comments on commit fab0232

Please sign in to comment.