我有在 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
的问题?
听起来很奇怪我发现如果我调用变量:
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
,它按预期工作。
感谢大家的评论。