Soweit ich weiß, ist der Zugriff auf streams.value.log
nur im Kontext des Autoplugins verfügbar, wenn eine neue Aufgabe oder Einstellung über den Operator :=
erstellt wird.Entwurfsmuster für die Anmeldung bei einer scala SBT Autoplugin
Ich bin auf der Suche nach einem guten Muster oder vielleicht einige verbesserten Kenntnissen über den Kontext von streams.value.log
so dass ich folgendes vermeiden:
Passing stream.value.log in jede Funktionskette, z. B. GetBucket (..., Logger: sbt.Logger) => ParseBucketName (..., Logger: sbt.Logger) => GetBucketName (..., Logger: sbt.Logger) => etc ..
mache ich etwas mit einem globalen wandelbar wie diese
trait AWSPluginUtils { //mutable logger: don't have to pass sbt.logger through every function private var _logger: Any = None def setLogger(sbtLogger: Logger): Unit = { _logger = sbtLogger } def getLogger(): Logger = { _getLogger } lazy val _getLogger: Logger = _logger match { case l: sbt.Logger => l } def infoLog(message: String): Unit = { getLogger().info(message) } def debugLog(message: String): Unit = { getLogger().info(message) } def errLog(message: String): Nothing = { getLogger().error(message) throw new RuntimeException(message) } }
Warum möchten Sie 1 vermeiden? Das ist die richtige Antwort, IMO. Wenn Sie das Boilerplate reduzieren möchten, können Sie die Logger- und impliziten Parameter Ihrer Funktionen festlegen. – sjrd