Dokumentation und Arbeitspakete angelegt

This commit is contained in:
2026-04-09 06:27:29 +02:00
parent fa36297e32
commit 79109594aa
13 changed files with 1069 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
# AP04 Logging-Adapter (SLF4J-Fassade + Log4j2-Bindung)
## Ziel
Sicherstellen, dass im gesamten Quellcode **nur noch SLF4J-Typen importiert werden** (`org.slf4j.Logger`, `org.slf4j.LoggerFactory`), außer in einem dedizierten **Logging-Adapter** und im **Bootstrap**. Die konkrete Log4j2-Bindung darf nur an diesen zwei Stellen sichtbar sein, wie von `technik-und-architektur.md` gefordert.
## Voraussetzungen
- AP03 (Paketstruktur vorhanden)
## Scope IN
- Alle Stellen im Produktivcode, die `org.apache.logging.log4j.LogManager` oder `org.apache.logging.log4j.Logger` importieren, werden umgestellt auf:
```java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
```
- Anlage einer minimalen `log4j2.xml` in `src/main/resources/`:
- Console-Appender (StdErr)
- File-Appender mit Zielpfad, der später (AP07) durch den Bootstrap überschrieben wird; für M1 genügt ein Default-Pfad `logs/asv-format-validator.log`
- Log-Level `INFO` für `de.gecheckt.asv`, `WARN` für alles andere
- Deutsche Log-Texte bleiben auf Deutsch
- Anlage eines `LoggingConfigurator` oder ähnlich im Paket `adapter.out.logging`, der Log4j2 **programmatisch** konfigurieren kann (Zielpfad der Log-Datei setzbar). Für M1 reicht eine Klasse mit einer Methode `void configureLogFile(Path logFile)`, die noch keine tiefe Magie macht, aber das Interface definiert.
- Architekturcheck: per `grep` sicherstellen, dass außerhalb von `adapter.out.logging` und `bootstrap` keine `org.apache.logging.log4j.*`-Imports mehr existieren.
## Scope OUT
- tatsächliche dynamische Log-Datei-Umleitung pro Lauf (das ist AP07)
- Log-Rotation, Log-Compression, eigene Appender-Klassen
- Logging-Policies, Log-Level pro Klasse
- Umbau der Log-Nachrichten selbst (Wortlaut, Formatierung)
## Schritte
1. Branch `m1/ap04-logging-adapter`
2. In allen Produktiv-Klassen außer `adapter.out.logging` und `bootstrap`: Log4j2-Imports durch SLF4J-Imports ersetzen
3. Minimale `log4j2.xml` in `src/main/resources/` anlegen
4. `LoggingConfigurator` in `adapter.out.logging` anlegen (Skelett)
5. `mvn clean verify` laufen lassen, muss grün sein
6. `grep -rn "org.apache.logging.log4j" src/main/java/ | grep -v "adapter/out/logging\|bootstrap"` muss **leer** sein
7. Commit `M1-AP04: Logging-Adapter, SLF4J-Fassade etabliert`
8. Abschlussbericht schreiben
## Abnahmekriterien
- kein Import von `org.apache.logging.log4j.*` außerhalb von `adapter.out.logging` und `bootstrap` (Grep-Nachweis im Bericht)
- `log4j2.xml` in `src/main/resources/` vorhanden
- `LoggingConfigurator`-Klasse in `adapter.out.logging` vorhanden (mindestens Skelett)
- `mvn clean verify` ist grün
- alle bestehenden Tests laufen weiterhin (SLF4J ist API-kompatibel; falls Tests wegen Logger-Mocks brechen, müssen sie angepasst werden — dann im Bericht dokumentieren)
- Abschlussbericht liegt vor
## Rest-Risiken und offene Punkte
- Falls bestehende Tests Log4j2-Logger mocken: Anpassung nötig. Im Zweifel Logger-Mocks entfernen, Logging ist keine Testlogik.
- `log4j2.xml` hat in M1 einen statischen Dateipfad. Der dynamische Pfad pro Lauf kommt erst in AP07.
## Bericht
`docs/arbeitspakete/m1/berichte/AP04-bericht.md` nach `templates/ap-bericht.md`.