log4j.xml precedence on local build
我有一个使用 log4j 进行日志记录的项目。我们有一个控制日志级别的 log4j.xml 文件。我想要另一个 log4j.local.xml,我计划将它添加到 gitignore 文件中,一旦它存在,它就优先于普通的 log4j.xml。这是在本地构建上,我可以根据自己的喜好设置日志级别,但是一旦项目被签入并构建(例如在 Jenkins 上)并部署正常的 log4j.xml 设置就会使用,因为 log4j.local.xml 将不存在.
编辑:
应用程序没有任何配置来为 log4j 指定设置文件或任何内容。我假设日志框架有一些正在使用的默认值。此外,应用程序使用 Java 代码进行 Spring 配置,而不是 XML 文件。
你可以使用spring\\的
这里是一个使用springs xml配置的例子:
1 2 3 4 5 6 7 8 9 | <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetClass" value="org.springframework.util.Log4jConfigurer"/> <property name="targetMethod" value="initLogging"/> <property name="arguments"> <list> <value>${log.properties}</value> </list> </property> </bean> |
然后每个环境将能够拥有不同的 log4j 属性文件。
编辑
java配置示例
1 2 3 4 5 6 7 8 | @Bean public MethodInvokingFactoryBean methodInvokingFactoryBean(@Value("${log.properties}") String location) { MethodInvokingFactoryBean methodInvokingFactoryBean = new MethodInvokingFactoryBean(); methodInvokingFactoryBean.setTargetClass(Log4jConfigurer.class); methodInvokingFactoryBean.setTargetMethod("initLogging"); methodInvokingFactoryBean.setArguments(new Object[]{location}); return methodInvokingFactoryBean; } |
在你的应用程序开始时你可以试试这个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import java.net.URL; import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; public class LogginConfig { public static void initLoggin() { final URL localLog4jConfig = LogginConfig.class.getResource("/log4j.local.xml"); if (null != localLog4jConfig) { System.out.println("using local log4j-configuration"); DOMConfigurator.configure(localLog4jConfig); } else { System.out.println("using Log4j-default"); } } public static void main(final String[] args) { initLoggin(); Logger.getLogger(LogginConfig.class).debug("helloooooo"); } } |
如果能找到log4j.local.xml,就会使用它。否则将使用 Log4j 的标准查找过程。
忽略 System.out 语句 :) 这个答案就像 EricF 的答案,只是没有弹簧。
我会赞成 SubOptimal 的答案,但首先我需要一些声誉 ;-)
这取决于你如何阅读配置文件。
如果使用默认方式,则在classpath中搜索文件
1 2 | change in developement the classpath so the development configuration is found first |
如果通过 JVM 选项指定配置文件(例如 Log4j 2 a?¢ 使用 -Dlog4j.configurationFile=path/to/log4j.xml)
1 2 3 | instead of using a hardcoded path use an environment variable and change that setting in development to the development configuration file |
如果您使用其他方式,您应该提供更多信息。