fix: Codex-Review-Befunde zu Verlauf-Detailanzeige und Log-Umstellung
- RuntimeLogDirectoryReconfigurer: Bei fehlgeschlagenem Log4j2-Reconfigure wird die
System-Property log.directory auf den vorherigen Wert zurückgesetzt, damit ein
späterer Versuch nicht faelschlich als "bereits aktiv" uebersprungen wird. Test ergaenzt.
- GuiHistoryTab: Beim Detailwechsel wird die KI-Rohantwort zurückgesetzt; verspätet
eintreffende Detail-Ergebnisse einer inzwischen gewechselten/abgewählten Selektion
werden über einen Fingerprint-Abgleich verworfen (kein "A unter B", keine dauerhaft
sichtbare fremde Rohantwort bei Ladefehler).
- GuiHistoryTab: Der technische Fehler-Tooltip wird bei nicht-fehlerhaften Datensätzen
auf den Standardtext zurückgesetzt (keine fremde Fehlermeldung mehr sichtbar).
- AiFailureMessageTranslator: praezisere Meldung ("kein gueltiges JSON oder ein
Pflichtfeld fehlt").
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+15
-2
@@ -92,12 +92,17 @@ public class RuntimeLogDirectoryReconfigurer {
|
||||
return LogDirectoryChange.unchanged();
|
||||
}
|
||||
|
||||
String previous = System.getProperty(SYSTEM_PROPERTY_KEY);
|
||||
System.setProperty(SYSTEM_PROPERTY_KEY, target);
|
||||
try {
|
||||
reconfigure();
|
||||
} catch (RuntimeException e) {
|
||||
LOG.warn("Log4j2 konnte nicht auf Log-Verzeichnis '{}' umgestellt werden: {}",
|
||||
target, e.getMessage());
|
||||
// Property auf den vorherigen Wert zurücksetzen: Bleibt sie auf dem neuen (nicht
|
||||
// aktivierten) Ziel stehen, würde die Idempotenz-Prüfung oben jeden weiteren
|
||||
// Umstellungsversuch fälschlich als „bereits aktiv" überspringen.
|
||||
restoreProperty(previous);
|
||||
LOG.warn("Log4j2 konnte nicht auf Log-Verzeichnis '{}' umgestellt werden: {} – "
|
||||
+ "bisheriges Log-Verzeichnis bleibt aktiv.", target, e.getMessage());
|
||||
return LogDirectoryChange.unchanged();
|
||||
}
|
||||
|
||||
@@ -105,6 +110,14 @@ public class RuntimeLogDirectoryReconfigurer {
|
||||
return LogDirectoryChange.changedTo(target);
|
||||
}
|
||||
|
||||
private static void restoreProperty(String previous) {
|
||||
if (previous == null) {
|
||||
System.clearProperty(SYSTEM_PROPERTY_KEY);
|
||||
} else {
|
||||
System.setProperty(SYSTEM_PROPERTY_KEY, previous);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Konfiguriert den laufenden Log4j2-{@link LoggerContext} neu, sodass
|
||||
* {@code ${sys:log.directory}} erneut aufgelöst wird.
|
||||
|
||||
+18
@@ -96,6 +96,24 @@ class RuntimeLogDirectoryReconfigurerTest {
|
||||
assertEquals(0, reconf.reconfigureCalls);
|
||||
}
|
||||
|
||||
@Test
|
||||
void apply_reconfigureFails_restoresPreviousProperty() {
|
||||
System.setProperty(KEY, "C:/vorher/logs");
|
||||
RuntimeLogDirectoryReconfigurer failing = new RuntimeLogDirectoryReconfigurer() {
|
||||
@Override
|
||||
protected void reconfigure() {
|
||||
throw new IllegalStateException("reconfigure kaputt");
|
||||
}
|
||||
};
|
||||
Path target = tempDir.resolve("neu");
|
||||
|
||||
LogDirectoryChange change = failing.apply(target);
|
||||
|
||||
assertFalse(change.changed());
|
||||
assertEquals("C:/vorher/logs", System.getProperty(KEY),
|
||||
"Nach fehlgeschlagener Neukonfiguration muss der vorherige Property-Wert wiederhergestellt sein");
|
||||
}
|
||||
|
||||
@Test
|
||||
void apply_nonCreatableDirectory_leavesPropertyUnchanged() throws IOException {
|
||||
RecordingReconfigurer reconf = new RecordingReconfigurer();
|
||||
|
||||
Reference in New Issue
Block a user