欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-03 14:26:29
...
最近为了实现统计一个网站的访问量,记录用户的登录信息,以方便站长实时了解自己网站的访问情况,选择了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);

      }
}

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