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同一文件夹下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值