Repository navigation
ADR 0001
Status: angenommen
Herkunft: #16 (Befund), #61 (Umsetzung), #69 (Darstellung der Kategorie im Target)
Bis Version 2 lieferte PrettyLog mit ConsoleLog einen fertigen Log-Target, der auch der Standard
aller öffentlichen Log-Funktionen war. ConsoleLog gab sensible Teile einer Log-Anweisung immer
aus. Eine App, die sich auf die Standardwerte verließ, schrieb sensible Daten deshalb auch in
Release-Builds nach stdout, ohne dass jemand das entschieden hatte.
- Das Paket enthält keinen Typ, der
LogTargetumsetzt. - Es gibt keinen Standard-Target:
to:ist bei jeder Methode vonPrettyLogProxyPflicht. - Es gibt keine globalen Log-Funktionen im Paket.
PrettyLogProxyist der einzige Einstieg. - Es gibt keine Registrierung von Targets im Paket. Die App hält ihre Liste selbst und gibt sie bei jedem Aufruf mit, üblicherweise in einer eigenen Datei mit Wrapper-Funktionen.
- Die Bausteine, die ein Target braucht, bleiben öffentlich, etwa
LogLevel.emojiundLogCategory.name. Wie ein Target den Namen darstellt, etwa auf feste Breite gekürzt, entscheidet es selbst. Dafür liefert das Paket keine Hilfsmethode.
Ein Logging-Paket kann nicht wissen, an welche Ziele eine App loggt und wohin sensible Daten dürfen. Jeder mitgelieferte Target würde diese Entscheidung für die App treffen, auch ein sichererer. Apps definieren ihre Targets in der Praxis ohnehin selbst (Konsole, OSLog, Backend, Analytics). Ohne Standard muss jede App einmal bewusst entscheiden, und nichts Unsicheres passiert still.
- Breaking Change für alle, die
ConsoleLog, die globalen Funktionen oder den Standardwert vonto:nutzen. Das führt zu einer neuen Hauptversion. - Die Einrichtung wird länger: Eine App braucht mindestens einen eigenen Target und eine Datei mit ihren Log-Funktionen. README und Demo-App zeigen beides, inklusive eines Konsolen-Targets, der sensible Teile nur in Debug-Builds ausgibt.
- Tests des Pakets brauchen einen eigenen Test-Target, der aufzeichnet, was ankommt.
-
ConsoleLoggibt sensible Teile nur mit#if DEBUGaus. Verworfen, weil das Paket damit weiter eine Richtlinie für die App festlegt, nur eine andere. -
canLogSensitiveInformationals Pflichtparameter beim Erzeugen vonConsoleLog. Verworfen, weil weiter ein Target im Paket bliebe, dessen Ausgabeformat und Ziel das Paket festlegt.
Hier stehen Architekturentscheidungen im heute gültigen Stand. Vorgänge bleiben Issues.