【发布时间】:2014-10-03 15:08:13
【问题描述】:
我希望有一个单一的 WAR 文件,它可以在不同的环境(如 dev、ci 和 prod)中工作,而 spring 环境在很大程度上迎合了我们的用例。每个环境的 log4j 是突出的项目之一。正如other answers 中所建议的那样,我们可以为每个环境配置一个 log4j - 但是每个环境的文件中都有很多重复,唯一不同的是诸如 SMTPAppender 的 toAddress 等次要属性。有没有一种简单的方法可以使用类似模板的 log4j 配置文件并在运行时替换每个环境的不同部分? Maven 在这里不起作用,因为它会导致编译时选择。
我能想到的一个解决方案是扩展 Log4jConfigurer 以读取一些环境变量,即。模板键值对的映射,并将模板文件中的模板变量替换为实际值,然后再将其传递给 DOMConfigurator。只是想检查是否有更简单的方法可以做到这一点,或者从最佳实践的角度来看我是否在找错树。
提前致谢!
【问题讨论】:
-
一个非模板解决方案是使用stackoverflow.com/questions/6116156/… 中提到的实体引用,我认为这在减少重复方面做得不错。
-
你能解释一下为什么编译时间在这里没有帮助吗?你的意思是你只想创建一次war并在所有具有-Denvironment=xxx属性的环境上运行它,而不是为每个环境构建不同的war文件?
标签: java spring log4j environment-variables spring-environment