chenchen 2014-09-18
最近为了实现统计一个网站的访问量,记录用户的登录信息,以方便站长实时了解自己网站的访问情况,选择了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); } }
就这么处理就可以了!路径可以修改成任意路径的!