Spring Boot 获取 IllegalArgumentException:无法解析占位符

问题描述 投票:0回答:1

我有在 Liberty 或 OpenLiberty 服务器上运行的 Spring Boot API。

在 Liberty server.env 文件中,我有如下日志设置:

log_dir=C:\mydir

log_level=INFO

然后在我的application.properties文件中,我有如下设置:

logging.file.name=${log_dir}

logging.level.org.springframework=${log_level}

我希望当应用程序启动时,

log_dir
log_level
将成功解决。

但是,我得到错误IllegalArgumentException: Could not resolve placeholder 'log_dir' in '${log_dir}'.

有趣的是,它只发生在

log_dir
,而不是
log_level

我发现解决它的唯一方法是硬编码

log_dir
的设置所以在我的application.properties我硬编码它像
logging.file.name=C:\mydir
而不是
logging.file.name=${log_dir}
.

注意我不必为

log_level
硬编码值并且它得到解决就好了。

但这当然不是好的解决方案。

附加信息

我在 server.env 中设置

log_dir
... 因为这是我们的要求,并且应用程序部署到不同的环境,每个环境都可以在不同的级别和位置记录文件。此外,有些信息,我们不想在代码库中共享,而是在服务器端安全保存。

我不使用liberty-maven-plugin.

我确实使用了 spring-boot-maven-plugin 并且它被设置为:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <!-- to expose build info in actuator/info -->
        <execution>
            <goals>
                <goal>build-info</goal>
            </goals>
        </execution>
    </executions>
</plugin>

我将应用程序打包为 war 文件,所以在我的 pom.xml 中,我有:

<packaging>war</packaging>

My Liberty server.xml 使用以下功能:

  <featureManager>
    <feature>javaee-8.0</feature>
    <feature>microProfile-3.3</feature>
    <feature>jndi-1.0</feature>
    <feature>localConnector-1.0</feature>
    <feature>jca-1.7</feature>
    <feature>jdbc-4.2</feature>
    <feature>springBoot-2.0</feature>
    <feature>servlet-4.0</feature>
    <feature>adminCenter-1.0</feature>
  </featureManager>

更新

更有趣的发现。根据我如何调用 server.env 中的“log_dir”变量,我得到以下结果:

  • log_dir=C:/me/myapi.log
    - 我遇到上述问题

    log.dir=C:/me/myapi.log
    - 它按预期工作

    logDir=C:/me/myapi.log
    - 它按预期工作

我不确定为什么部署在 Liberty 上的 Spring Boot 有问题解决

log_dir
但没有解决问题
log_level

或者为什么部署在 Liberty 上的 Spring Boot 有问题解决

log_dir
但没有解决
log.dir
logDir
的问题?

spring-boot logging websphere-liberty open-liberty
1个回答
0
投票

听起来很奇怪我发现如果我调用变量:

  • logdir=C:/logs/myapi.log
    >>>> 工作正常
  • log.dir=C:/logs/myapi.log
    >>>> 工作正常
  • log_dir=C:/logs/myapi.log
    >>>> 失败
    IllegalArgumentException: Could not resolve placeholder 'log_dir' in value "${log_dir}
  • MYAPI_log_dir=C:/logs/myapi.log
    >>>> 失败
    IllegalArgumentException: Could not resolve placeholder 'MYAPI_log_dir' in value "${MYAPI_log_dir}

正如我们之前发现的 Liberty 问题和“.”的使用在

log.dir
等变量名称中,我决定使用
logdir
而不是
log_dir
log.dir
,它按预期工作。

感谢大家的评论。

© www.soinside.com 2019 - 2024. All rights reserved.