Logging

Kirby.exe

Top Contributor
Also da ich gerade die Datenbank in meinem Projekt von NoSQL auf PostgreSQL migriere habe ich mir gedacht, dass ich auch noch ein Logging System eingfügen sollte. Nun zu meiner Frage:

Soll ich das Logging als eine Art Datenbank Tabelle führen? Oder altmodisch in eine .txt ballern xD Gibt es Empfehlungen von guten Bibliotheken?
 
K

kneitzel

Gast
Nach meiner Erfahrung kannst du bei der Wahl der Library nicht viel falsch machen. Datenbank würde ich zumindest nicht ausschließlich nehmen, denn die kann ja auch mal Probleme machen und da willst du ja auch Logs sehen.

Im Netz kann man da einiges an Vergleichen finden. Wir nutzen log4j auf Arbeit, aber irgendwie ist das, was man Nutzt, fast immer gleich, so dass es eigentlich schon fast egal ist, was man nimmt.
 

mrBrown

Super-Moderator
Mitarbeiter
Soll ich das Logging als eine Art Datenbank Tabelle führen? Oder altmodisch in eine .txt ballern xD
Würde erstmal immer auf der Konsole loggen, grad wenn man dann zB Docker nutzt, kann man damit dann eigentlich alles beliebig konfigurieren. Nur in die DB aus den Gründen die @kneitzel schon genannt hat nicht :)
Gibt es Empfehlungen von guten Bibliotheken?
Wenns um Java geht: nutzt du irgendeinen Application-Server oder irgendein Framework? Dann ist dort garantiert schon was eingebunden, in den meisten Fällen über SLF4J nutzbar.

Ansonsten log4j 2, das dürfte das modernste sein.
 

Robert Zenz

Top Contributor
Java hat auch eigene Logger dabei in java.util.logging, dann muss man sich nicht extra eine Abhaengigkeit suchen wenn einem das vollkommen ausreicht.

Standardmaeszig wuerde ich auf stdout/stderr loggen, da so gut wie immer garantiert ist dass diese Ausgaben dann auch irgendwo landen. Wenn du zum Beispiel in die Datenbank loggst, wirst du im Log nie sehen wenn die Datenbankverbindung mal abgerissen ist. Von dem her, am besten einfach auf stdout/stderr belassen, und dieses dann "aussen herum" weiterverarbeiten. Du kannst es zum Beispiel auf die Konsole ausgeben und in eine Datei schreiben, oder weiterleiten an einen anderen Dienst (zum Beispiel irgendetwas das Log-Rotation macht).

Vergiss bei all dem aber nicht das loggen zwei wichtigen Bedingungen unterliegt:
  1. Logge was Sinn ergibt.
    Du (und idealerweise andere) sollten in der Lage sein vom Log auf moegliches Fehlverhalten zu schlieszen. Das bedeutet jetzt nicht dass du Funktionsnamen und Zeilennummern loggst alle Naselang, sondern dass du die logischen Ablaeufe und Schritte loggst, so das man nachvollziehen kann was innerhalb der Logik passiert ist, ohne das man dafuer den Quellcode parallel offen haben muss.
  2. Das eventueller Datenschutz greift.
    Wenn du zum Beispiel alle Werte welche in eine Tabelle geschrieben werden loggst, hast du bei der Tabelle KUNDEN dann ploetzlich Kundendaten im Log. Was gewuenscht sein kann oder auch nicht.
 

Kirby.exe

Top Contributor
Also ich verwende Python unf nicht Java xD

Ich hatte mir das auch so überlegt, dass ich zwei arten von Logs haben möchte:

Einmal ein „Audit Log“ welcher einfach veränderungen loggt. Beispielsweise Channel x wurde von User y editiert.

Und dazu noch einen Error Log wo eben Fehlverhalten geloggt wird :)
 

Robert Zenz

Top Contributor
Also ich verwende Python unf nicht Java xD
Oh, da hab' ich nicht d'rauf geachtet in welcher Kategorie ich bin.
Einmal ein „Audit Log“ welcher einfach veränderungen loggt. Beispielsweise Channel x wurde von User y editiert.
Das wuerde ich in der Datenbank halten, ja.

Es gibt in der Hinsicht auch einen interessanten Ansatz den ich mal gesehen habe, wo die Zeilen quasi unveraenderlich sind. Also jedes mal wenn eine Aenderung der Zeile stattfindet, wird diese als neue Zeile eingefuegt. Damit hat man dann den gesamten Verlauf aller Aenderungen, beziehungsweise man sieht wie die Daten zum Zeitpunkt X ausgesehen haben.
Und dazu noch einen Error Log wo eben Fehlverhalten geloggt wird
Wie gesagt, da wuerde sich stdout/stderr anbieten.
 

Neue Themen


Oben