Friedrich Siever

14. Januar 2024

Effektives Logging in Nest.js - Ein Leitfaden

von: Friedrich Siever | Last Updated: 14.01.24

Hast du jemals die Logs in deiner Konsole bemerkt, wenn du deine Nest.js-Entwicklungsumgebung startest? Diese scheinbar simplen Meldungen sind ein entscheidender Aspekt jeder Anwendung, der die Überwachung, Fehlerbehebung und Leistungsoptimierung erleichtert.

In Nest.js, einem beliebten Node.js-Framework, bietet das integrierte Logger-Modul eine leistungsstarke und flexible Lösung für das Logging.

Vereinfacht gesagt: Logs helfen dir als Entwickler dabei, besser zu verstehen, wie sich dein aktuelles System verhält oder was es gerade macht. In diesem Beitrag werfen wir einen detaillierten Blick auf das Logging in Nest.js und erkunden bewährte Praktiken für ein effektives Logging. Von der Integration des Logger-Moduls bis zur Anpassung von Log-Transporten – lass uns herausfinden, wie du das volle Potenzial des Nest.js Loggers nutzen kannst.

Praktische Implementation

Um das Logging-System von Nest.js nutzen zu können, benötigt unsere Controller-Klasse eine neue Eigenschaft. Nennen wir sie logger.

Wir nutzen den Namen der Klasse in den Logs, um es uns einfacher zu machen, herauszufinden, wo diese Logs herkommen.

@Controller("/exhibitions")
export class ExhibitionsController {
  private readonly logger = new Logger(ExhibitionsController.name);

  constructor(
    @InjectRepository(Exhibition)
    private readonly repository: Repository<Exhibition>,
  ) {}
  // ...
}

Diese Technik ist sehr nützlich, um sicherzustellen, dass Log-Einträge den Ursprung der Log-Nachricht eindeutig identifizieren. Wenn du später den Klassennamen änderst, wird dies automatisch im Logger widerspiegelt, ohne dass du den Log-Code aktualisieren musst.

Log Levels in Nest.js

Es gibt vier Standard-Log-Level in Nest.js, die du verwenden kannst:

  • log: Für allgemeine Informationen oder Protokolle.
  • debug: Für detaillierte Informationen, die normalerweise nur für die Fehlerbehebung während der Entwicklung verwendet werden.
  • warn: Für Warnungen oder potenzielle Probleme, die beachtet werden sollten.
  • error: Für Fehler oder Ausnahmen.

Du kannst den gewünschten Log-Level einfach durch den entsprechenden Methodenaufruf auf dem Logger festlegen, zum Beispiel logger.log(...), logger.debug(...), logger.warn(...), und logger.error(...).

Im Folgenden präsentiere ich ein einfaches Beispiel für die Verwendung in unserer findAll-Methode:

  @Get()
  async findAll() {
    this.logger.log('Hit the findAll route');
    const exhibitions = await this.repository.find();
    this.logger.debug(`Found ${exhibitions.length} exhibitions`);
    return exhibitions;
  }

Wenn du nun die entsprechende Route triffst, wirst du in den Log-Nachrichten feststellen: Log-Levels sind farblich gekennzeichnet, und du siehst die Angaben zum auslösenden Code ([ExhibitionsController]).

Logs in Entwicklung und Produktion

Während der Entwicklung loggen wir wahrscheinlich viele Dinge, um den Entwicklungsprozess zu unterstützen. In der Produktionsumgebung ist es jedoch üblicher, nur wichtige Informationen wie Fehler und Warnungen zu protokollieren.

Lass uns nun einen Blick darauf werfen, wie wir dies in Nest.js einfach umsetzen können. In der main.ts-Datei kannst du ganz einfach “auswählen”, welche Log-Levels du sehen möchtest. Hier ein Beispiel:

// src/main.ts
import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";
import { ValidationPipe } from "@nestjs/common";

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    logger: ["error", "warn", "debug"],
  });
  app.useGlobalPipes(new ValidationPipe()); // <-
  await app.listen(3000);
}
bootstrap();

Wie du bemerken wirst, sind nun plötzlich alle grünen Log-Nachrichten verschwunden. Allerdings sei angemerkt, dass dies während der Entwicklungsphase oder der Lernphase keine so gute Idee ist. Dennoch ist es gut zu wissen.

Fazit

Fazit

Die Nutzung des integrierten Nest.js-Loggers bietet mehrere Vorteile im Vergleich zu einfachen console.log-Anweisungen. Durch die gezielte Auswahl von Log-Levels in der Produktionsumgebung können wir die Ausgabe auf wichtige Informationen wie Fehler und Warnungen beschränken. Dies ermöglicht eine klarere und effizientere Überwachung.

Die farbliche Kennzeichnung der Log-Levels verbessert die Lesbarkeit und Identifikation von Log-Nachrichten. Zudem ermöglicht die einfache Integration von Kontextinformationen eine präzisere Protokollierung, insbesondere wenn mehrere Teile der Anwendung gleichzeitig agieren.

Die Flexibilität und Erweiterbarkeit des Nest.js-Loggers erlauben es uns, individuelle Anpassungen vorzunehmen und den Logger an die spezifischen Anforderungen unserer Anwendung anzupassen. Insgesamt erleichtert die Verwendung des Nest.js-Loggers das Debuggen, die Fehlerbehebung und die Überwachung unserer Anwendung in verschiedenen Umgebungen.

0
0 Bewertungen

Jetzt selbst bewerten