package com.xnx3.j2ee.func; import javax.servlet.http.HttpServletRequest; import com.aliyun.openservices.log.common.LogItem; import com.aliyun.openservices.log.exception.LogException; import com.xnx3.j2ee.Global; import com.xnx3.j2ee.entity.User; import com.xnx3.j2ee.shiro.ShiroFunc; import com.xnx3.j2ee.util.IpUtil; import com.xnx3.net.AliyunLogUtil; /** * 会员动作日志的缓存及使用。 * 有其他日志需要记录,可以参考这个类。可吧这个类复制出来,在此基础上进行修改 * @author 管雷鸣 */ public class ActionLogCache { public static AliyunLogUtil aliyunLogUtil = null; static{ //判断是否使用日志服务进行日志记录,条件便是 accessKeyId 是否为空。若为空,则不使用 String use = Global.get("ALIYUN_SLS_USE"); if(use != null && use.equals("1")){ //使用日志服务 String keyId = Global.get("ALIYUN_ACCESSKEYID"); String keySecret = Global.get("ALIYUN_ACCESSKEYSECRET"); String endpoint = Global.get("ALIYUN_SLS_ENDPOINT"); String project = Global.get("ALIYUN_SLS_PROJECT"); String logstore = Global.get("ALIYUN_SLS_USERACTION_LOGSTORE"); //最大超时时间 int log_cache_max_time = Global.getInt("ALIYUN_SLS_CACHE_MAX_TIME"); if(log_cache_max_time == 0){ log_cache_max_time = 120; } //最大条数 int log_cache_max_number = Global.getInt("ALIYUN_SLS_CACHE_MAX_NUMBER"); if(log_cache_max_number == 0){ log_cache_max_number = 100; } if(keyId.length() > 10){ aliyunLogUtil = new AliyunLogUtil(endpoint, keyId, keySecret, project, logstore); //开启触发日志的,其来源类及函数的记录 aliyunLogUtil.setStackTraceDeep(4); aliyunLogUtil.setCacheAutoSubmit(log_cache_max_number, log_cache_max_time); Log.info("开启日志服务进行操作记录"); }else{ //此处可能是还没执行install安装 } } } /** * 插入一条日志 * @param logItem 传入要保存的logItem,若为空,则会创建一个新的。此项主要为扩展使用,可自行增加其他信息记录入日志 * @param request HttpServletRequest * @param goalid 操作的目标的id,若无,可为0,也可为空 * @param action 动作的名字,如:用户登录、更改密码 * @param remark 动作的描述,如用户将名字张三改为李四 */ public static synchronized void insert(LogItem logItem, HttpServletRequest request, int goalid, String action, String remark){ if(aliyunLogUtil == null){ //不使用日志服务,终止即可 return; } if(logItem == null){ logItem = aliyunLogUtil.newLogItem(); } /*用户相关信息,只有用户登录后,才会记录用户信息*/ User user = ShiroFunc.getUser(); if(user != null){ logItem.PushBack("userid", user.getId()+""); logItem.PushBack("username", user.getUsername()); } /* 动作相关 */ logItem.PushBack("goalid", goalid+""); logItem.PushBack("action", action); logItem.PushBack("remark", remark); /*浏览器自动获取的一些信息*/ if(request != null){ logItem.PushBack("ip", IpUtil.getIpAddress(request)); logItem.PushBack("param", request.getQueryString()); logItem.PushBack("url", request.getRequestURL().toString()); logItem.PushBack("referer", request.getHeader("referer")); logItem.PushBack("userAgent", request.getHeader("User-Agent")); } try { aliyunLogUtil.cacheLog(logItem); } catch (LogException e) { e.printStackTrace(); } } /** * 插入一条日志 * @param request HttpServletRequest * @param goalid 操作的目标的id,若无,可为0,也可为空 * @param action 动作的名字,如:用户登录、更改密码 * @param remark 动作的描述,如用户将名字张三改为李四 */ public static synchronized void insert(HttpServletRequest request, int goalid, String action, String remark){ insert(null, request, goalid, action, remark); } /** * 插入一条日志 * @param request HttpServletRequest * @param action 动作的名字,如:用户登录、更改密码 * @param remark 动作的描述,如用户将名字张三改为李四 */ public static void insert(HttpServletRequest request, String action, String remark){ insert(null, request, 0, action, remark); } /** * 插入一条日志 * @param request HttpServletRequest * @param goalid 操作的目标的id,若无,可为0,也可为空 * @param action 动作的名字,如:用户登录、更改密码 */ public static void insert(HttpServletRequest request, int goalid, String action){ insert(null, request, goalid, action, ""); } /** * 插入一条日志 * @param request HttpServletRequest * @param action 动作的名字,如:用户登录、更改密码 */ public static void insert(HttpServletRequest request, String action){ insert(null, request, 0, action, ""); } }