Anladığım kadarıyla, streams.value.log
erişim, yalnızca yeni bir görev oluştururken veya :=
işlecini kullanarak ayar yaparken otomatik dökümanın bağlamında kullanılabilir.Bir scalada oturum açma için tasarım deseni SBT Autoplugin
Ben bu yüzden şu önleyebilirsiniz streams.value.log
bağlamında iyi bir desen ya da belki bazı gelişmiş bilgi arıyorum:
örneğin her fonksiyon zincirine stream.value.log geçirilmesi. GetBucket (..., logger: sbt.Logger) => ParseBucketName (..., logger: sbt.Logger) => GetBucketName (..., logger: sbt.Logger) => vb ..
Ben, mesela açıkça geçmesine fonksiyon hiyerarşileri aracılığıyla streams.value.log geçmek zorunda kalmamak için Örtülü parametreler kullanılarak sona erdi bu
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) } }
Neden 1'den kaçınmak istersiniz? Bu doğru cevap, IMO. Kazan plakasını kısmak isterseniz, fonksiyonlarınızın 'logger' ve implicit parametrelerini yapabilirsiniz. – sjrd