【问题标题】:How to set SBT logLevel for log member of a streams task?如何为流任务的日志成员设置 SBT logLevel?
【发布时间】:2019-05-30 08:06:06
【问题描述】:

logLevelwhen using streams.value.log in an SBT task怎么设置?

例如,如何将此任务的日志压缩为仅Warn 日志?:

lazy val mainRunner = taskKey[Seq[File]]("Runs a main method")
lazy val mainRunnerSetting = mainRunner := {


  val logger = streams.value.log

  (runner in Compile).value.run(
    mainClass = "com.me.Main",
    classpath = (dependencyClasspath in Compile).value.files,
    log = logger,
    options = Array()
  )
}

任务内外我尝试了各种logLevel设置,比如:

logLevel in run in Compile := Level.Warn
logLevel := Level.Warn
logLevel in mainRunner := Level.Warn
logLevel in streams := Level.Warn

...但是当这个任务执行时它总是设置为Info

【问题讨论】:

    标签: scala logging sbt task log-level


    【解决方案1】:

    不确定您的问题出在哪里,但此 build.sbt 内容可以很好地设置任务的日志级别

    val mainRunner = taskKey[Unit]("Print some log")
    val runner2 = taskKey[DummyRun]("hold dummy runner")
    
    lazy val root = project
      .in(file("."))
      .settings(
        runner2 := new DummyRun,
        mainRunner := {
          val logger = streams.value.log
          logger.warn("Hello warn")
          logger.info("Hello info")
          logger.debug("Hello debug")
          runner2.value.run(logger)
        },
        (logLevel in mainRunner) := Level.Warn
      )
    

    其中DummyRunproject 文件夹中包含内容的类

    import sbt.Logger
    
    class DummyRun {
      def run(log: Logger): Unit = {
        log.warn("DummyRun warn")
        log.info("DummyRun info")
        log.debug("DummyRun debug")
      }
    }
    

    输出:

    > mainRunner
    [warn] Hello warn
    [warn] DummyRun warn
    

    【讨论】:

    • 谢谢,所以我没有尝试的一种方法恰好是您建议的答案:将 (logLevel in mainRunner) := Level.Warn 放在我的依赖项目的 .settings() 中有效!
    • @ecoe 我很高兴它有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多