我有一个使用log4j进行日志记录的项目。我们有一个log4j.xml文件来控制日志级别。我想有另一个log4j.local.xml,我计划添加到gitignore文件,一旦它存在,它优先于普通的log4j.xml。这是在本地构建上,我可以根据自己的喜好设置日志级别,但是一旦项目签入并构建(例如在Jenkins上)并部署了正常的log4j.xml设置,因为log4j.local.xml不会在那里使用
修改 应用程序没有任何配置来指定log4j的设置文件或任何内容。我假设日志记录框架有一些正在使用的默认值。此外,应用程序使用Java代码进行Spring配置,而不是XML文件。
答案 0 :(得分:3)
您可以使用弹簧MethodInvokingFactoryBean
告诉log4j在哪里查找log4j配置。
以下是使用spring xml配置的示例:
<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配置示例
@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 :(得分:0)
这取决于您如何阅读配置文件。
如果使用默认方式,则在类路径中搜索文件
change in developement the classpath so the development configuration
is found first
如果您通过JVM选项指定配置文件(例如,Log4j 2™使用-Dlog4j.configurationFile = path / to / log4j.xml)
instead of using a hardcoded path use an environment variable and
change that setting in development to the development configuration
file
如果您使用其他方式,则应提供更多信息。
答案 2 :(得分:0)
在您的应用程序开始时,您可以尝试:
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的回答,但首先我需要一些声誉; - )