我最近在练习SSH的整合实现用户注册与登录功能,现在有这样一个需求,service层有一个addUser方法,我想在这个方法之后利用AOP加上一个日志信息,在机器的E盘上打印出“XX时间有一个用户注册”这一条信息。
日志切面类是这样实现的:package miracle.qsc.aspect;import java.text.SimpleDateFormat;
import java.util.Date;import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;public class addUserAspect {
public void addUserAspect(){
PropertyConfigurator.configure("log4j.properties");
Logger logger = Logger.getRootLogger();
Logger loggerFile= Logger.getLogger("thisProject.file");
Date d = new Date();
SimpleDateFormat now = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String h = now.format(d);
loggerFile.info("在"+h+"时有一位用户注册");
}

}
XML文件如下:<bean id="logaspect" class="miracle.qsc.aspect.addUserAspect">
</bean>
<aop:config> 
<aop:aspect id="log4j" ref="logaspect">
<aop:after method="addUserAspect" pointcut="execution(public * miracle.qsc.m.service.*.addUser(..))"/>
</aop:aspect>
</aop:config>用的是一个普通的JAVA类,log4j.properties文件放在的src的目录下了。
程序跑起来当我在注册用户成功后,在E盘确实能出现所期望的日志信息。但是Myeclipse控制台报异常,信息如下
log4j:ERROR Could not read configuration file [log4j.properties].
java.io.FileNotFoundException: log4j.properties (系统找不到指定的文件。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)........
log4j:ERROR Ignoring configuration file [log4j.properties].
this4j--> INFO {addUserAspect.java:17} - 在2011-06-13 19:57时有一位用户注册
this4j--> INFO {FileUploadInterceptor.java:277} - Removing file userDTO.file C:\Program Files\Apache Software Foundation\Tomcat 6.0\work\Catalina\localhost\myFirstSSH\upload__c7024a7_13088dcae33__7fff_00000003.tmp请问既然程序能跑通并且期望的功能都能实现为啥报错呢?
还有我记得在WEB项目中使用Log4j需要在WEB.xml配置一个Servlet才能用,那就说明这个类必须是servlet,并且log4j.properties配置文件需要放在WEB-INF目录下,如果我将上面那个项目的log4j.properties放在WEB-INF下控制台同样会报找不到配置文件的错误,并且我期望的日志信息也出不来。那么在Web项目中用Log4j那个类必须是Serlvet么?另外有一个疑问,软件项目拿到客户现场需要手动部署到服务器上的时候,是不是只要把WEBROOT目录拷贝出去,放到客户的服务器上就可以了,如果是这样的话程序的一些配置文件都在SRC目录里,程序读不到这个配置文件会不会出问题呢?麻烦各位帮忙看一下,小弟不胜感激。

解决方案 »

  1.   

    程序并不是运行在src这个目录的,在运行时,需要把src中的所有东西编译输出到比如web-inf/classes目录下。
    在部署时,是不需要copy src目录的。
    你的文件没有找到,是因为这个log4j没有编译到classes下面吧。
      

  2.   

    找不到log4j.properties 文件,看看你的classes目录下有没有这个文件
      

  3.   


    agree
    报错的原因就是没有找到哪个文件
    请确认web-inf/classes下有这个文件
      

  4.   

    classes下确实没有这个文件,这个文件在WEB-INF下,那为什么程序能正确执行,如何让那个文件部署到classes下呢?呢?