我正在创建一个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的值。
.
1条答案
按热度按时间s4chpxco1#
设置环境变量
LOGGING_CONFIG
有效覆盖中的值application.properties
(参见外部化配置)。您所能做的就是在具有更高优先级的源中设置值,例如作为系统属性:但是,所使用的环境变量之间的名称冲突
catalina.sh/catalina.bat
spring已经在tomcat的最新版本(8.5.54和9.0.34)中进行了修改,其中变量被重命名CATALINA_LOGGING_CONFIG
.此问题仅影响windows(并且仅当您使用
catalina.bat/startup.bat
,通过ProCurn将tomcat作为服务运行不受影响),因为批处理文件没有本地环境变量的概念:在windows上,将环境变量导出到所有子进程。在unix上:
如果要将其导出到子进程(以及使用
exec
)您必须使用:备注:您应该以不同的方式调用环境变量,例如。
<your application's name>_CONFIG_HOME>
这样您就可以确保不会覆盖另一个应用程序使用的变量。更好的是,使用spring配置属性,这样就可以设置CONFIG_HOME
不止一种方式。