java - logback groovy 中的变量替换

标签 java variables groovy logback logback-groovy

我正在使用 logback.xml,变量被加载到字符串中,如下所示:

<FileNamePattern>${logDirectory}/${logFileName}.%d{yyyy-MM-dd}.%i.html</FileNamePattern>

在调用我的 jar 之前,在 .bat 文件中设置 logDirectory 和 logFileName。

set logFileName=foobar

但是现在,我处理的是groovy。它非常棒,而且比 xml 更具可读性。但变量不再展开。

appender("FILE", RollingFileAppender) {
file = "${logDirectory}/${logFileName}.html"
    rollingPolicy(TimeBasedRollingPolicy) {
        fileNamePattern = "${logDirectory}/${logFileName}.%d{yyyy-MM-dd}.%i.html"
        ...
    }
...
} 

路径现在为 null/null :'(

最糟糕:以下测试抛出异常:

if ("${logConsole}" == "true") {

有人知道如何让它发挥作用吗?

-- 编辑添加完整的 logback.groovy

/*
 * The configuration use the following variables :
 * logDirectory => The log folder
 * logFileName => The log file name
 * logConsole => true console activation.
 **/

import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.classic.html.HTMLLayout
import ch.qos.logback.core.ConsoleAppender
import ch.qos.logback.core.encoder.LayoutWrappingEncoder
import ch.qos.logback.core.rolling.RollingFileAppender
import ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy

import static ch.qos.logback.classic.Level.INFO
import static ch.qos.logback.classic.Level.OFF

def LOG_DIRECTORY = System.getProperty("logDirectory")
def LOG_FILE_NAME = System.getProperty("logFileName")
def LOG_CONSOLE = System.getProperty("logConsole")

appender("FILE", RollingFileAppender) {
    file = "${LOG_DIRECTORY}/${LOG_FILE_NAME}.html"
    rollingPolicy(TimeBasedRollingPolicy) {
        fileNamePattern = "${LOG_DIRECTORY}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}.%i.html"
        timeBasedFileNamingAndTriggeringPolicy(SizeAndTimeBasedFNATP) {
            maxFileSize = "100MB"
        }
        maxHistory = 5
    }
    encoder(LayoutWrappingEncoder) {
        layout(HTMLLayout) {
            pattern = "%level%date%logger{36}%msg"
        }
    }
}
appender("STDOUT", ConsoleAppender) {
    withJansi = true
    encoder(PatternLayoutEncoder) {
        pattern = "%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{36}) - %msg%n"
    }
}
logger("org", INFO)
logger("net", INFO)
logger("freemarker", INFO)

// We don't care about the bean creation at least it's more than a warn
logger("org.springframework.beans.factory", WARN)

root(OFF, ["FILE"])

if (LOG_CONSOLE == "true") {
    root(OFF, ["FILE","STDOUT"]);
}

最佳答案

System.getProperty() 调用检索在 java 命令行上使用 -D 设置的属性,而在 .bat 文件中则设置 shell/环境变量。

尝试在 logback.groovy 文件中使用 System.getenv()

关于java - logback groovy 中的变量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30641302/

相关文章:

arrays - 如何比较两个数组包含相同的项目或不包含在 groovy 中?

java - GWT RequestFactory 是否支持扩展 RequestContext 的接口(interface)?

css - 如何在 CSS 中使用变量?

javascript - jQuery 动态按钮选择器

perl - 在 perl 中使运行时变量名称成为全局变量

javascript - 获取 JSON 对象 JavaScript

eclipse - 从 Eclipse 调试在 ScriptEngine 中运行的 Groovy 脚本

java - 按属性反序列化 JSON

java - 如何以内存有效的方式对大型 HashMap 进行排序?

Java初始化一个子类