Skip to content

ADR 0001

Benno Kress edited this page Oct 21, 2026 · 2 revisions

ADR 0001: Das Paket liefert keine Log-Targets

Status: angenommen
Herkunft: #16 (Befund), #61 (Umsetzung), #69 (Darstellung der Kategorie im Target)

Kontext

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.

Entscheidung

  • Das Paket enthält keinen Typ, der LogTarget umsetzt.
  • Es gibt keinen Standard-Target: to: ist bei jeder Methode von PrettyLogProxy Pflicht.
  • Es gibt keine globalen Log-Funktionen im Paket. PrettyLogProxy ist 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.emoji und LogCategory.name. Wie ein Target den Namen darstellt, etwa auf feste Breite gekürzt, entscheidet es selbst. Dafür liefert das Paket keine Hilfsmethode.

Begründung

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.

Konsequenzen

  • Breaking Change für alle, die ConsoleLog, die globalen Funktionen oder den Standardwert von to: 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.

Verworfene Alternativen

  • ConsoleLog gibt sensible Teile nur mit #if DEBUG aus. Verworfen, weil das Paket damit weiter eine Richtlinie für die App festlegt, nur eine andere.
  • canLogSensitiveInformation als Pflichtparameter beim Erzeugen von ConsoleLog. Verworfen, weil weiter ein Target im Paket bliebe, dessen Ausgabeformat und Ziel das Paket festlegt.

PrettyLog

Hier stehen Architekturentscheidungen im heute gültigen Stand. Vorgänge bleiben Issues.

Clone this wiki locally