sbt插件 - 如何确保我的settingKey在其他一切之前解决?

问题描述 投票:0回答:1

我有一个settingKey[Level.Value],用于日志级别。我想在其他所有内容之前设置此值,以便将我的日志级别应用于所有内容。

(我知道有一个setLogLevel但我希望能够设置它,仅适用于我的插件)

如果我的设置名为myLogLevel,我试图在我的每个任务和设置中调用myLogLevel.value

问题似乎是如果我没有使用它的值yield,那么不会执行该设置。

我的设置是这样的:

myLogLevel := {
  val theValueSetByTheUser = myLogLevel.value
  MyLogLibrary.setLevel(theValueSetByTheUser)
  theValueSetByTheUser
}

所以我该怎么做 ?我应该在任何地方打电话给println(myResultLevel),以便它被使用。这看起来很傻。

谢谢。

scala sbt
1个回答
0
投票

我找到了解决方案:

你需要两个settingKey

第一个是:myLogLevel: settingKey[Level.Value]

你的插件的消费者可以将它设置为build.sbt中的任何内容,你可以在你的设置中设置一个默认值:myLogLevel := Level.Info

然后,你有第二个设置:myLog: settingKey[Logger]

这不会暴露给消费者,你可以将它定义为:

myLog := {
  createLogOfLevel(myLogLevel.value)
}

在您的其他任务和设置中,您现在可以调用:

val log = myLog.value
log.info("message")
© www.soinside.com 2019 - 2024. All rights reserved.