spring引导logback.xml外部化

f2uvfpb9  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(524)

我正在创建一个spring引导应用程序,我想在其中外部化logback文件。我这样做的原因是为了让使用者能够灵活地决定在哪个位置获取api的日志。为了实现这一点,我在application.properties中添加了logging.config条目,如下所示

logging.config=file:${CONFIG_HOME}apilogback.xml

config_home将是一个环境变量,它指向所有配置文件的公共位置。提供给config_home的示例值是c:/sws/apache-tomcat-8.5.16/appconfig/当我使用tomcat运行api时,而不是拾取application.properties文件中提到的logging.config的值,它拾取的是catalina.bat中定义的默认值。catalina.bat中的默认值如下:

LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"

令我惊讶的是,在unix环境中运行时,这似乎工作得很好,但在windows环境中却不行。是否有办法确保我们正在从api的application.properties加载logging.config的值。
.

s4chpxco

s4chpxco1#

设置环境变量 LOGGING_CONFIG 有效覆盖中的值 application.properties (参见外部化配置)。您所能做的就是在具有更高优先级的源中设置值,例如作为系统属性:

try {
    if (System.getProperty("logging.config") == null) {
        final String config_home = System.getenv("CONFIG_HOME");
        if (config_home != null) {
            System.setProperty("logging.config", "file://" + configHome + "/apilogback.xml");
        }
    }
} catch (AccessControlException ex) {
    // SecurityManager in place...
}

但是,所使用的环境变量之间的名称冲突 catalina.sh/catalina.bat spring已经在tomcat的最新版本(8.5.54和9.0.34)中进行了修改,其中变量被重命名 CATALINA_LOGGING_CONFIG .
此问题仅影响windows(并且仅当您使用 catalina.bat/startup.bat ,通过ProCurn将tomcat作为服务运行不受影响),因为批处理文件没有本地环境变量的概念:

set LOGGING_CONFIG=foobar

在windows上,将环境变量导出到所有子进程。在unix上:

LOGGING_CONFIG=foobar

如果要将其导出到子进程(以及使用 exec )您必须使用:

export LOGGING_CONFIG

备注:您应该以不同的方式调用环境变量,例如。 <your application's name>_CONFIG_HOME> 这样您就可以确保不会覆盖另一个应用程序使用的变量。更好的是,使用spring配置属性,这样就可以设置 CONFIG_HOME 不止一种方式。

相关问题