Files
asv-format-validator/docs/arbeitspakete/m1/AP04-logging-adapter.md

63 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`.