Skip to content

Latest commit

 

History

History
188 lines (136 loc) · 5.17 KB

File metadata and controls

188 lines (136 loc) · 5.17 KB

OutputLogger - Automatisches Logging für Java-Programme

Der OutputLogger ist eine Java-Klasse, die alle Ausgaben Ihres Programms sammelt und automatisch in Dateien mit Zeitstempel speichert.

Funktionen

  • Automatisches Sammeln: Alle print, println und printf Aufrufe werden sowohl auf der Konsole ausgegeben als auch geloggt
  • Zeitstempel-Dateinamen: Automatische Generierung von Dateinamen mit aktuellem Datum und Uhrzeit
  • Automatisches Speichern: Log wird beim Programmende automatisch gespeichert
  • Ordnerstruktur: Erstellt automatisch den gewünschten Output-Ordner
  • Git-Integration: Logs werden automatisch von Git ignoriert

Verwendung

1. Grundlegende Verwendung

// Logger erstellen
OutputLogger logger = new OutputLogger("logs");

// Verwenden wie System.out
logger.println("Hallo Welt!");
logger.printf("Zahl: %d%n", 42);
logger.print("Text ohne Zeilenumbruch");

2. Mit benutzerdefiniertem Dateinamen

OutputLogger logger = new OutputLogger("logs");
logger.setCustomFilename("mein_test");
// Datei wird z.B. "mein_test_2025-10-07_14-30-25.txt"

3. Integration in bestehende Programme

Ersetzen Sie einfach System.out durch logger:

// Vorher:
System.out.println("Ergebnis: " + result);

// Nachher:
logger.println("Ergebnis: " + result);

4. Erweiterte Optionen

// Automatische Kategorisierung für Input-Dateien
OutputLogger logger = OutputLogger.createForInputFile("logs", "data/choreo01.txt");
// Erstellt: logs/beispieldateien/choreo01_2025-10-07_14-30-25.txt

// Manuelle Unterordner-Erstellung
OutputLogger logger = new OutputLogger("logs", "mein_unterordner");

// Unterordner nachträglich setzen
logger.setSubDirectory("neuer_unterordner");

// Manuelles Speichern
logger.saveToFile();

// Automatisches Speichern deaktivieren
logger.disableAutoSave();

// Nur ins Log schreiben (nicht auf Konsole)
logger.logOnly("Debug-Information");

// Anzahl der Log-Einträge
int count = logger.getOutputCount();

// Aktueller Output-Pfad
String path = logger.getCurrentOutputPath();

Ordnerstruktur

Nach der ersten Verwendung wird folgende organisierte Struktur erstellt:

your-project/
├── src/
├── logs/                          # Wird automatisch erstellt
│   ├── beispieldateien/           # choreo01.txt, choreo02.txt, etc.
│   │   ├── choreo01_2025-10-07_14-30-25.txt
│   │   ├── choreo02_2025-10-07_14-32-10.txt
│   │   └── choreo03_2025-10-07_14-35-15.txt
│   ├── testdateien/               # choreoA.txt, choreoB.txt, etc.
│   │   ├── choreoA_2025-10-07_15-20-33.txt
│   │   └── choreoB_2025-10-07_15-25-18.txt
│   ├── tests/                     # Dateien mit "test" im Namen
│   │   └── test_custom_2025-10-07_16-10-45.txt
│   ├── custom/                    # Dateien mit "custom" im Namen
│   │   └── custom_scenario_2025-10-07_16-15-22.txt
│   └── sonstige/                  # Alle anderen Dateien
│       └── andere_datei_2025-10-07_16-20-33.txt
└── .gitignore                     # Logs werden ignoriert

Automatische Kategorisierung

Der Logger kategorisiert Input-Dateien automatisch:

  • beispieldateien/: choreo01.txt, choreo02.txt, choreo03.txt, etc.
  • testdateien/: choreoA.txt, choreoB.txt, choreoC.txt, etc.
  • tests/: Alle Dateien mit "test" im Namen
  • custom/: Alle Dateien mit "custom" im Namen
  • sonstige/: Alle anderen Dateien

Git-Integration

Die .gitignore Datei wurde automatisch erweitert:

\bin

# Output Logger Dateien - nicht in Git einchecken
logs/
*.log

Beispiele

ChoreoGraph mit Logger

Die ChoreoGraph-Klasse nutzt jetzt automatisch die Unterordner-Funktionalität:

// In ChoreoGraph.java wird automatisch verwendet:
logger = OutputLogger.createForInputFile("logs", filePath);

Dies erstellt automatisch die richtige Ordnerstruktur basierend auf der Input-Datei.

Einfaches Beispiel

public class MeinProgramm {
    public static void main(String[] args) {
        OutputLogger logger = new OutputLogger("logs");
        
        logger.println("=== Programmstart ===");
        
        for (int i = 1; i <= 5; i++) {
            logger.printf("Iteration %d%n", i);
        }
        
        logger.println("=== Programmende ===");
        // Log wird automatisch gespeichert
    }
}

Dateiformat

Die gespeicherten Log-Dateien enthalten:

=== Programmausführung vom 2025-10-07 14:30:25 ===

=== Programmstart ===
Iteration 1
Iteration 2
Iteration 3
Iteration 4
Iteration 5
=== Programmende ===

Kompilierung und Ausführung

# Kompilieren
javac src/OutputLogger.java src/MeinProgramm.java

# Ausführen
java -cp src MeinProgramm

# Log-Datei wird automatisch in logs/ erstellt

Vorteile für die Entwicklung

  • Historische Aufzeichnung: Alle Testläufe werden automatisch dokumentiert
  • Debugging: Einfache Nachverfolgung von Programmabläufen
  • Vergleiche: Verschiedene Programmdurchläufe können verglichen werden
  • Automatisch: Kein manuelles Kopieren von Konsolenausgaben nötig
  • Zeitstempel: Eindeutige Zuordnung von Ausgaben zu Testläufen