变量不被读取为系统属性

时间:2015-01-04 21:12:58

标签: scala groovy logback

我正在尝试从系统属性中读取我的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时,它可以正常工作

2 个答案:

答案 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)命令。