我希望有一个WAR文件可以在不同的环境中工作(如dev,ci和prod),弹簧环境很大程度上适合我们的用例。 log4j每个环境是一个优秀的项目。正如other answers中所建议的那样,我们可以为每个环境配置一个log4j - 但是每个环境的文件都有很多重复,唯一不同的是像SMTPAppender的地址这样的次要属性等等。 ..是否有一种简单的方法可以使用类似模板的log4j配置文件,并且在运行时替换每个环境的部件有所不同? Maven不会在这里工作,因为它会导致编译时选择。
我能想到的一个解决方案是扩展Log4jConfigurer以读取一些环境变量即。模板键值对的映射,并将模板文件中的模板变量替换为实际值,然后再将其传递给DOMConfigurator。只是想检查是否有更简单的方法,或者我是从最佳实践的角度咆哮错误的树。
提前致谢!
答案 0 :(得分:1)
我不完全了解您的情况,但财产占位符应该有所帮助: http://jvleminc.blogspot.ru/2008/05/avoid-absolute-path-in-log4j-properties.html
指定appender文件时,在属性文件中使用占位符,例如
log4j.appender.file.File=${log4j.logFile}
将此占位符值作为VM参数传递给(Web)应用程序。 log4j引擎将尝试解析占位符并最终回退到System参数,因此,在我们的示例中:
-Dlog4j.logFile=C:/logs/MyApplication.log
顺便说一句,我认为人们通常会外化日志配置,即他们使用外部log4j.properties文件。发布工程师根据环境管理这些配置。此外,它还提供了更改文件和重新启动应用程序的功能,或者在某些情况下允许更改某些值,甚至无需重新启动。