Java 用于多个环境的log4j模板文件
我希望有一个WAR文件可以在不同的环境(如dev、ci和prod)中工作,spring环境很大程度上满足我们的用例。每个环境的log4j是突出的项目之一。正如中所建议的,我们可以为每个环境配置一个log4j,但是每个环境的文件中都有很多重复,唯一不同的是一些次要属性,如SMTPAppender的toAddress等。。有没有一种简单的方法可以使用log4j配置文件这样的模板,并在运行时替换每个环境中不同的部分?Maven在这里不起作用,因为它会导致编译时选择 我能想到的一个解决方案是扩展log4jconfig以读取一些环境变量,即。映射模板键-值对,并将模板文件中的模板变量替换为实际值,然后将其传递给DOMConfigurator。我只是想看看是否有更简单的方法,或者从最佳实践的角度来看,我是不是找错了方向Java 用于多个环境的log4j模板文件,java,spring,log4j,environment-variables,spring-environment,Java,Spring,Log4j,Environment Variables,Spring Environment,我希望有一个WAR文件可以在不同的环境(如dev、ci和prod)中工作,spring环境很大程度上满足我们的用例。每个环境的log4j是突出的项目之一。正如中所建议的,我们可以为每个环境配置一个log4j,但是每个环境的文件中都有很多重复,唯一不同的是一些次要属性,如SMTPAppender的toAddress等。。有没有一种简单的方法可以使用log4j配置文件这样的模板,并在运行时替换每个环境中不同的部分?Maven在这里不起作用,因为它会导致编译时选择 我能想到的一个解决方案是扩展log4
提前谢谢 我不完全理解您的情况,但属性占位符应该有帮助:
log4j.appender.file.File=${log4j.logFile}
-Dlog4j.logFile=C:/logs/MyApplication.log
顺便说一句,我认为人们通常将日志配置外部化,即使用外部log4j.properties文件。发布工程师根据环境管理这些配置。此外,它还提供了更改文件和重新启动应用程序的功能,或者在某些情况下允许在不重新启动的情况下更改某些值。一个非模板解决方案是使用实体引用,我认为这在减少重复方面做得很好。您能解释一下为什么编译时在这里帮不上忙吗?您的意思是只想创建一次war,并在所有具有-Denvironment=xxx属性的环境中运行它,而不是为每个环境构建不同的war文件?