系统日志管理
记录用户的访问的Controller与ip等信息
属于监控功能
使用aop可以在不修改源代码的基础上给这些Controller增加日志功能。
Aop记录日志
(1)实现步骤
- 编写springmvc.xml, 开启Aop自动代理
<aop:aspectj-autoproxy/>
- 编写日志切面类(@Aspect)
@Component
@Aspect //
public class LogAspect {
private Logger l = LoggerFactory.getLogger(LogAspect.class);
@Around("execution(* com.glc.web..*Controller.*(..))")//切面
public Object log(ProceedingJoinPoint joinPoint){//joinPoint为切点
Object result = null;
try {
//前置
result = joinPoint.proceed();//执行切面中的方法
//后置
//保存日志
l.info("切面:writeLog");
saveSysLog(joinPoint);//执行日志操作
} catch (Throwable e) {
//异常
} finally {
//最终
}
return result;
}
@Autowired
HttpServletRequest request;
@Autowired
ISysLogService iSysLogService;
public void saveSysLog(ProceedingJoinPoint joinPoint){ //获取具体的执行方法
SysLog sysLog = new SysLog();
sysLog.setIp(request.getRemoteAddr());
sysLog.setMethod(joinPoint.getSignature().getName());
sysLog.setTime(new Date());
sysLog.setAction(joinPoint.getTarget().getClass().getName());
l.info(sysLog+"");
iSysLogService.saveSysLog(sysLog);//调用service写入数据库
}
}
- Syslogservice实现类
@Service
public class ISysLogServiceImpl implements ISysLogService {
@Autowired
SysLogDao sysLogDao;
@Override
public void saveSysLog(SysLog sysLog) {
sysLog.setId(UUID.randomUUID().toString());
sysLogDao.writeLog(sysLog);
}
}
- SysLogDao配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!--namespace: 需要映射的Dao接口类型-->
<mapper namespace="com.glc.dao.log.SysLogDao">
<insert id="writeLog" parameterType="sysLog">
insert into st_sys_log
(
id ,
user_name ,
ip ,
time ,
method ,
ACTION ,
company_id ,
company_name
)
values
(
#{id },
#{userName },
#{ip },
#{time },
#{method },
#{action },
#{companyId },
#{companyName }
)
</insert>
</mapper>