log4j配置文件路径问题

  今天在学习log4j,建的是eclipse中的java工程,source文件夹是src,class文件存放在bin目录下。建了个 com.logger.SimppleLogging类。log4j.properties并没有存放在src文件下,而是存放在和SimppleLogging同个包下。通过设置log4j.configuration这个系统属性来告诉LogManager到哪加载配置文件。查看了下源码,发现LogManager是先通过file来加载,之后是用classLoader来加载的。所以第一次我先使用classLoader来加载:

System.setProperty("log4j.configuration", "com/logger/log4j.properties");

 这个时候能够加载到。第二次使用该文件的绝对路径加载:

System.setProperty("log4j.configuration", "E:/project/j2se/src/com/logger/log4j.properties");

但是这样LogManager并没有加载到该配置文件,查看LogManager源码,发现LogManager是通过构造java.net.URL去加载的,由于URL没有识别出该协议。在前面加上file:后,LogManager加载到了配置文件:

System.setProperty("log4j.configuration", "file:E:/project/j2se/src/com/logger/log4j.properties");

由于配置的是绝对路径,所以不通用。当时在网上查到两种方法取得该类所在目录:

this.getClass().getResource("/")//第一种
File file = new File(".");
file.getAbsolutePath();//第二种

 但通过打印发现第一种方法返回的是我的bin文件夹所在的url(带有file:),而第二种方法返回的是user.dir\.于是使用第一种方法能够满足我的需求:

System.setProperty("log4j.configuration", SimppleLogging.class.getResource("/com/logger").toString() + "/log4j.properties");

 SimppleLogging.class.getResource("/")返回的是bin文件夹,加上/com/logger就为SimppleLogging.class所在的目录,而log4j.properties也位于SimppleLogging.class同一文件夹下。

你可能感兴趣的:(eclipse,log4j,.net,J2SE)