【问题标题】:Variable not being read as a system property变量未作为系统属性读取
【发布时间】:2015-03-02 10:52:30
【问题描述】:

我试图从系统属性中读取我的 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 |-ch.qos.logback.classic.LoggerContext 中的信息[默认] - 找到资源 [logback.groovy] 在 [文件:/home/des/workspace/play/target/scala-2.10/classes/logback.groovy] 22:03:31,449 |-信息在 ch.qos.logback.classic.gaffer.ConfigurationDelegate@5c3286d0 - 关于 实例化类型为 [ch.qos.logback.core.FileAppender] 的附加程序 22:03:31,450 |-信息在 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] 不适用 [USER_HOME] 属性 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] 的 appender 附加到 Logger[ROOT]

请注意,当我在我的 logback 文件中定义 USER_HOME 时,它可以正常工作

【问题讨论】:

    标签: scala groovy logback


    【解决方案1】:

    您需要执行以下操作

    sbt '; set javaOptions += "-DUSER_HOME="/tmp" ; runMain Test'
    

    将您的build.sbt 更改为包含

    fork := true
    
    envVars := Map("USER_HOME" -> "/tmp")
    

    如果您想在不使用 sbt 的情况下从生产环境运行,您可以将其直接传递(使用 -DUSER_HOME="/tmp")到创建 Play 分发时生成的运行脚本(使用 dist)命令。

    【讨论】:

    • 怕解决不了问题。系统属性设置正确。这可以通过在 main() 方法中添加 println("Prop: " + System.getProperty("USER_HOME")) 来证明
    【解决方案2】:

    这是因为我使用的是 groovy。认为这是一个 logback 错误,我报告了它并因此得到解决:http://jira.qos.ch/browse/LOGBACK-1041

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 2012-11-25
      • 1970-01-01
      • 2015-03-16
      相关资源
      最近更新 更多