log4j打印日志文件 如何实现相对路径到 项目工程下

最近为了实现统计一个网站的访问量,记录用户的登录信息,以方便站长实时了解自己网站的访问情况,选择了Apache的log4j,但是在选择相对路径那块卡主了,X度了好多方法(其实大多都是一样的内用,还一个字都不差的),都没有能解决问题,无奈搞了2天终于解决了,与大家分享一下

需求:

用户登录该网站时,把用户的登录名,ip,时间。统计到一个txt文档里,以方便其他系统调用此txt。项目名称为coop要不日志文件放在coop/logs下

问题:

Log4j日志输出路径只能设定成绝对路径,这个在web项目中就变得很不方便了,日志在服务器上怎能设置为绝对路径呢!

比如我想要设定日志保存在webapp/log

这是log4j.properties文件的配置

log4j.logger.loguser=info,user
#
#Record the user login information
#
log4j.appender.user=org.apache.log4j.DailyRollingFileAppender
log4j.appender.user.File[b]=${LOG_DIR}login.log
log4j.appender.user.layout=org.apache.log4j.PatternLayout
log4j.appender.user.layout.ConversionPattern=  %d{yyyy\-MM\-dd HH\:mm\:ss }| %m%n

在用户登录页面的action里

public class UserAction{
   private static final Logger loguser = Logger.getLogger("loguser");
   /**
    * 此处 判断用户名和密码是否正确,正确就返回user对象,--此处省略 :D 
    *
   */
    //重点在这
    // 把用户写入到日志		
      if(user!=null){
         String url = UserAction.class.getClassLoader().getResource("").getPath();
         //D:/apache-tomcat-7.0.0/wtpwebapps/COOP/WEB-INF/classes/

          url = url.replace("WEB-INF/classes/", "logs/");
         //替换之后的url=D:/apache-tomcat-7.0.0/wtpwebapps/COOP/logs/ 

          System.setProperty("LOG_DIR", url);
	  //LOG_DIR就是在log4j.properties那个个file 对应到路径

          String host = request.getRemoteHost();
          String str = user.getUserName();
          loguser.info(str+" | "+host);

      }
}

就这么处理就可以了!路径可以修改成任意路径的!

相关推荐