2016-10-17 52 views
2

我想在SBT中做一些日誌記錄。當初始化settingKey時我試圖獲得streams。但編譯器抱怨A setting cannot depend on a task如何在SBT中登錄settingKey?

配置片段在這裏。

val appConfig = settingKey[Config]("The parsed application.conf in SBT") 

appConfig := { 
    // ... 
    streams.value.log.error("Cannot find application.conf. Please check if -Dconfig.file/resource is setting correctly.") 
    // ... 
} 

有什麼方法可以做登錄settingKey?謝謝。

+0

[在sbt設置初始化過程中如何打印流]可能的副本(http://stackoverflow.com/questions/33765889/how-to-print-to-stream-during-sbt-setting-initialization) – Caoilte

回答

2

一個設置應該只能保存可設置的數據或者其他設置可以直接計算的東西。 streams是一項任務,因此您可以根據它和appConfig設置來完成另一項任務。例如:

val appConfig = settingKey[File]("application.conf file") 
val parsedAppConfig = taskKey[Config]("The parsed application.conf in SBT") 

parsedAppConfig := { 
    // ... 
    parse(appConfig.value) 
    // ... 
    streams.value.log.error("Cannot find application.conf. Please check if -Dconfig.file/resource is setting correctly.") 
    // ... 
} 
0

有可能去走一走streams和直接創建一個新的ConsoleLogger()

val appConfig = settingKey[Config]("The parsed application.conf in SBT") 

appConfig := { 
    // ... 
    val logger: Logger = ConsoleLogger() 
    logger.error("Cannot find application.conf. Please check if -Dconfig.file/resource is setting correctly.") 
    // ... 
} 

警告:如果streams.value.log被設定爲比ConsoleLogger其他的東西,你的日誌說明會忘記,仍然登錄到控制檯。儘管如此,這可能是可以接受的。