在使用下面的这句代码加载log4j配置文件时
PropertyConfigurator.configure("log4j.properties");
报错:
log4j:ERROR Could not read configuration file [log4j.properties].
java.io.FileNotFoundException: src/log4j.properties (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:372)
at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:403)
at ....
log4j:ERROR Ignoring configuration file [log4j.properties].
查找了很多文章,有3种解决办法:
1. 将上面的代码改成
Properties props = new Properties();
props.load(MsgRecvServer.class.getClassLoader().getResourceAsStream("log4j.properties"));
PropertyConfigurator.configure(props);
亲测,解决。参考:http://stackoverflow.com/questions/2288876/how-to-configure-log4j-with-a-properties-file
2. 去掉上面的那句代码,采用下面的方式使用log4j
import org.apache.log4j.Logger;
public class MyService {
private static Logger logger = Logger.getLogger(MyService.class);
public void test(String name) {
logger.debug(name);
}
}
采用这种方式log4j会自动在classpath (类路径?环境变量?还是项目的根目录?个人认为翻译为 类路
径 好些,麻烦知道准确翻译的告诉我下,谢谢啦) 的根目录下寻找log4j.properties文件。
参考:http://stackoverflow.com/questions/6528287/log4j-could-not-read-configuration-file
和 https://coderanch.com/t/541813/log-properties-FileNotFoundException
说是,如果配置文件在classpath下,把最上面的那句代码去掉即可。因为它不仅不必要,而且是问题的根源,
因为最上面的那句代码告诉log4j要在你的当前工作目录下查找配置文件,而你的当前工作目录不是classpath的一部分。
3. 将log4j.properties文件从 src根目录 转移到 项目的根目录下面,即可。但这种方案对于我的项目不适用。
ps:还有一种解决方案:这个是个很奇怪的方案,在配置文件里的第一行加上:# MaiL或者别的注释;就是别
把”log4j.rootLogger = DEBUG,MAIL”放第一行就行。这个我没有试,如果上面的解决方法都不行,可以
尝试下这个。参考:http://www.cnblogs.com/tv151579/archive/2013/01/20/2868912.html