sbt插件-如何确保我的settingKey在其他所有操作之前都已解决?

时间:2018-11-19 22:29:25

标签: scala sbt

我有一个settingKey[Level.Value],用于记录日志级别。我想先设置此值,以便将我的日志级别应用于所有内容。

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

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

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

我的设置是这样的:

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

那我该怎么办?我是否应该在任何地方都叫println(myResultLevel)以便使用。好像很傻

谢谢。

1 个答案:

答案 0 :(得分: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")