当前位置: 首页 > 知识库问答 >
问题:

变量未作为系统属性读取

殷德本
2023-03-14

我试图从系统属性中读取日志配置中的变量,但没有成功。我定义了一个非常简单的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?")

        }
}

注意,当我在日志文件中定义USER_HOME时,它工作得很好

共有1个答案

牟黎昕
2023-03-14

这是因为我使用的是Groovy。我认为这是一个logback bug,于是报告了它,并通过以下方式解决了这个问题:http://jira.qos.ch/browse/logback-1041

 类似资料:
  • 我正在从事一个基于java web的大型项目,该项目基于Spring和Hibernate的一些旧版本,并使用log4j 1.2x。由于最近在log4j2中发现了漏洞,我们已被指示升级到log4j2的最新版本。我正在尝试实现log4j2log4j1桥,这样就不必更新应用程序中的所有日志代码。除了我无法指定日志文件的存储位置外,一切都正常,因为log4j1桥似乎不支持系统属性。在启动tomcat服务器

  • 问题内容: JVM中的系统属性System.getProperties()和环境变量System.getenv()有什么区别? 问题答案: 我认为两者之间的区别归结为访问。系统环境变量可以由任何进程访问,而Java系统属性只能由添加到它们的进程访问。 另外,正如Bohemian所说,env变量是在OS中设置的(但是可以通过Java设置),而系统属性则作为命令行选项传递或通过设置setPropert

  • 大写格式,建议在使用系统环境变量时使用。 如果使用环境变量而不是系统属性,大多数操作系统都不允许使用以句点分隔的键名,但是可以使用下划线(例如,SPRING_CONFIG_NAME代替spring.config.name)。 环境变量。以下划线作为分隔符的大写格式。_不应在属性名称中使用 我很好奇这是否只是Spring Boot的特性,还是plain Spring也支持sys道具的大写env va

  • 我需要的是一种适当的方法,让这个方法获得值。 将这个“sdk.root”放在哪里,以便IntelliJ提取它?在属性文件中还是在bash中?

  • 问题内容: 我想这样做: 注意这一行: 我试图设置这样的值: 但我看不到任何效果。 在调用方法之前是否已配置log4j ? 还有其他方法吗? 问题答案: 看来您做对了所有事情。我认为在主类中设置属性与通过命令行指定属性之间没有任何区别,只要它发生在实际的log4j初始化之前即可。 我认为您的问题是 在 指定属性 之前已 加载日志记录框架。我可以说在调用配置器时将配置日志记录框架(log4j)。这样

  • 系统变量的输出通常以{$Think开头,如: {$Think.server.http_host} // 输出$_SERVER['HTTP_HOST']变量 {$Think.session.user_id} // 输出$_SESSION['user_id']变量 {$Think.post.id} // 输出$_POST['id']变量 {$Think.get.page} // 输出$_GET['p