系统日志管理
- (1)分析
记录用户的访问的Controller与ip等信息
属于监控功能
只有查看与保存功能 - (2)数据组成
//设置登录用户信息seesion获取
//设置企业信息
//IP地址request获取
//设置记录时间
//执行的方法名称新方法获取
//执行的类名称
系统日志管理实现
两个功能,一个是分页显示,一个是保存日志
》SysLog
》TestSysLogService
》ISysLogService,SysLogServiceImpl
》 ISysLogDao,ISysLogDao.xml
》SysLogController,xxx.jsp
Syslog
public class Syslog {
private String id ;
private String userName ;
private String ip ;
private Date time ;
private String method ;
private String action ;
private String companyId ;
private String companyName ;
TestSyslogService
@Test
public void test01(){
//分页列表
//页面上显示分页列表,就要求业务方法中提供查询PageInfo的方法
PageInfo<Syslog> pi= iSyslogService.findByPage(1,30,"1");
l.info("pi = "+pi);
}
@Test
public void test02(){
//将一个表单数据保存在javaBean中,再将javaBean存到数据库
Syslog sysLog = new Syslog();
//设置登录用户信息
sysLog.setUserName("老王");
//设置企业信息
sysLog.setCompanyId("1");
sysLog.setCompanyName("吉首大学");
//IP地址
sysLog.setIp("192.168.10.11");
//设置记录时间
sysLog.setTime(new Date());
//执行的方法名称
sysLog.setMethod("toList");
//执行的类名称
sysLog.setAction("com.lfy.web.company.CompanyController");
sysLog.setCompanyId("1");
sysLog.setCompanyName("吉首大学");
l.info("test02 sysLog="+sysLog);
iSyslogService.saveSyslog(sysLog);
}
ISyslogService
PageInfo<Syslog> findByPage(int currentPage, int pageSize, String companyId);
void saveSyslog(Syslog sysLog);
SyslogServiceImpl
@Override
public PageInfo<Syslog> findByPage(int currentPage, int pageSize, String companyId) {
//设置参数
PageHelper.startPage(currentPage,pageSize);
//调用全查
List<Syslog> list=iSyslogDao.findAll(companyId);
//包装成PageInfo
PageInfo<Syslog> pi = new PageInfo<>(list);
return pi;
}
@Override
public void saveSyslog(Syslog sysLog) {
String uuid= UUID.randomUUID().toString();
sysLog.setId(uuid);
iSyslogDao.save(sysLog);
}
ISyslogDao
List<Syslog> findAll(String companyId);
void save(Syslog sysLog);
ISyslogDao.xml
<mapper namespace="com.lfy.dao.system.syslog.ISyslogDao">
<!-- 配置映射 字段-->
<resultMap id="syslogMap" type="sysLog">
<id column="id" property="id" />
<result column="user_name" property="userName" />
<result column="ip" property="ip" />
<result column="time" property="time" />
<result column="method" property="method" />
<result column="ACTION" property="action" />
<result column="company_id" property="companyId" />
<result column="company_name" property="companyName" />
</resultMap>
<!-- List<SysLog> findAll(String companyId);-->
<select id="findAll" parameterType="string" resultMap="syslogMap">
select * from st_sys_log where company_id =#{companyId} order by time desc
</select>
<!-- void save(SysLog sysLog);-->
<insert id="save" parameterType="sysLog">
insert into st_sys_log values
(
#{id },
#{userName },
#{ip },
#{time },
#{method },
#{action },
#{companyId },
#{companyName }
)
</insert>
</mapper>
SyslogController
@Controller
@RequestMapping("/system/syslog")
public class SysLogController extends BaseController {
private static final Logger l = LoggerFactory.getLogger(SysLogController.class);
@Autowired
ISyslogService iSyslogService;
@RequestMapping(path = "/toList", method = {RequestMethod.GET, RequestMethod.POST})
public String toList(@RequestParam(defaultValue = "1") int currentPage, @RequestParam(defaultValue = "30") int pageSize) {
l.info("toList currentPage="+currentPage);
l.info("toList pageSize="+pageSize);
//调查询分页列表的方法
PageInfo<Syslog> pi = iSyslogService.findByPage(currentPage, pageSize, getLoginCompanyId());
//将pi添加到页面
request.setAttribute("pi", pi);
return "system/log/log-list";
}
}
log-list.jsp
<c:forEach items="${pi.list}" var="log" varStatus="st">
<tr>
<td>${st.count }</td>
<td>${log.userName }</td>
<td>${log.ip}</td>
<td>${log.action}</td>
</tr>
</c:forEach>
优化日志列表
- (1)分析
日志记录多,生成的页号按钮多 - (2)实现
控制循环次数
并进行边界判断
page.jsp
<c:forEach begin="${pi.pageNum-5 <= 0 ? 1:pi.pageNum-5}" end="${pi.pageNum+5>pi.pages?pi.pages:pi.pageNum+5}" var="i">
<li class="paginate_button ${pi.pageNum==i ? 'active':''}"><a href="javascript:goPage(${i})">${i}</a></li>
</c:forEach>