框架记录操作日志的方法采用aop拦截器的方式对系统操作进行日志流痕记录。
<bean id="log4jHandlerAOP" class="com.lanyuan.logAop.LogAopAction"></bean>
<aop:config proxy-target-class="true">
<aop:aspect id="logAspect" ref="log4jHandlerAOP">
<aop:pointcut id="logPointCut" expression="execution(* com.lanyuan.service.impl.*.* (..))" />
<aop:around method="logAll" pointcut-ref="logPointCut" /> </aop:aspect>
</aop:config>
说明:
1、在springmvc框架中配置aop相关设置。
2、对service包层进行切面拦截处理。
3、LogAopAction.logAll方法具体拦截的逻辑内容。
逻辑处理代码如下:
/**
* 日志记录
*/
@Aspect
@Component
public class LogAopAction {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private LogMapper logMapper;
public Object logAll(ProceedingJoinPoint point) throws Exception {
Object result = null;
String userName = "";
// 执行方法所消耗的时间
Long start = System.currentTimeMillis();
// 当前用户
try {
result = point.proceed();
} catch (Throwable e) {
logger.error("调用方法发生异常", e);
}
Long end = System.currentTimeMillis();
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String requestURI = request.getRequestURI();
//获取浏览器ip
String ip = Common.toIpAddr(request);
if (!"/login.html".equals(requestURI)) {
// 登录名
userName = Common.findAuthenticatedUsername();
}
boolean b = false;
// 执行方法名
String methodName = point.getSignature().getName();
String[] clazzMethod = {"add", "save", "update", "modify", "delete"};
for (String method : clazzMethod) {
if (methodName.contains(method)) {
b = true;
break;
}
}
if (b && StringUtils.hasLength(userName)) {
Log log = new Log();
log.setUsername(userName);
String className = point.getTarget().getClass().getSimpleName();
log.setModule(className);
log.setAction(methodName);
log.setActionTime(String.valueOf(end - start));
log.setUserIP(ip);
logMapper.add(log);
}
return result;
}
}
说明:
1、计算point.proceed 记录调用耗时时间。
2、当操作非登录时候获取用户名。
3、对于系统非查询类操作且用户是登录状态的,记录操作的日志。
4、记得要将最后的结果返回,不然调用的时候会获取不到值。
<!-- 增加操作日志 -->
<insert id="add" parameterType="com.lanyuan.entity.Log">
insert into sys_log (
username,
module,
action,
actionTime,
userIP
)
values(
#{username},
#{module},
#{action},
#{actionTime},
#{userIP}
)
</insert>
软件定制及其他业务
请加微信号:13128600812
公众号: