我正在尝试从系统属性中读取我的logback配置中的变量,但没有成功。我定义了一个非常简单的logback.groovy,如下所示:
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.FileAppender
import static ch.qos.logback.classic.Level.DEBUG
appender("FILE", FileAppender) {
file = "${USER_HOME}/myApp.log"
encoder(PatternLayoutEncoder) {
pattern = "%msg%n"
}
}
root(DEBUG, ["FILE"])
然后是一个简单的Test.scala:
import org.slf4j.LoggerFactory
object Test {
val log = LoggerFactory.getLogger(getClass)
def main(args: Array[String]): Unit = {
log.debug("Where does the logging go?")
}
}
然后运行
sbt -DUSER_HOME =" / tmp"
但是logback不会获取系统属性。以下是我运行程序时的输出:
22:03:30,768 | -INFO in ch.qos.logback.classic.LoggerContext [default] - 找到资源[logback.groovy] at [文件:/home/des/workspace/play/target/scala-2.10/classes/logback.groovy] 22:03:31,449 | -INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@5c3286d0 - 关于 实例化[ch.qos.logback.core.FileAppender]类型的appender 22:03:31,450 | -INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@5c3286d0 - 命名 appender as [FILE] 22:03:31,515 | -ERROR in ch.qos.logback.classic.gaffer.AppenderDelegate@7930f0f9 - Appender [ch.qos.logback.core.FileAppender]类型的[FILE]没有appplicable [USER_HOME] property 22:03:31,556 | -INFO in ch.qos.logback.core.FileAppender [FILE] - 文件属性设置为 [null / myApp.log] 22:03:31,562 | -INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@5c3286d0 - 设置 记录器的水平[ROOT]到DEBUG 22:03:31,569 | -INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@5c3286d0 - 将名为[FILE]的追加器附加到Logger [ROOT]
请注意,当我在我的logback文件中定义USER_HOME时,它可以正常工作
答案 0 :(得分:0)
因为我正在使用常规。认为这是一个logback错误我报告了这样,并因此得到了解决:http://jira.qos.ch/browse/LOGBACK-1041
答案 1 :(得分:-1)
您需要执行以下操作
sbt '; set javaOptions += "-DUSER_HOME="/tmp" ; runMain Test'
或
将您的build.sbt
更改为包含
fork := true
envVars := Map("USER_HOME" -> "/tmp")
如果要在不使用sbt
的情况下从生产环境运行,可以直接将其传递(使用-DUSER_HOME =" / tmp")到创建Play分发时生成的运行脚本(使用dist
)命令。