此文章是基于  EasyUI+Knockout实现经典表单的查看、编辑

一. 相关文件介绍

  1. log.jsp:系统日志管理界面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>日志管理</title>
<%@ include file="/common/head.jsp"%>
</head>
<body>
<div class="toolbar">
<a href="#" plain="true" class="easyui-linkbutton" icon="icon-arrow_refresh" title="刷新" data-bind="click:refreshClick">刷新</a>
</div> <div id="condition" class="container_12" style="position:relative;height:50px;">
<div class="clear" style="height:13px;"></div> <div class="grid_1 lbl">日志日期</div>
<div class="grid_2 val"><input type="text" data-bind="value:form.logDate" class="txtBox easyui-daterange"/></div> <div class="prefix_9" style="position:absolute;top:5px;height:0;">
<a id="search" href="#" class="buttonHuge button-blue" style="margin:0 15px;" data-bind="click:searchClick">查询</a>
<a id="reset" href="#" class="buttonHuge button-blue" data-bind="click:clearClick">清空</a>
</div>
</div> <div id="tt" class="easyui-tabs">
<div title="系统日志" >
<table data-bind="datagrid:system">
<thead>
<tr>
<th field="fileName" align="left" width="150" >日志文件 </th>
<th field="fileSize" align="left" width="100" >文件大小 </th>
<th field="id" align="center" width="150" formatter="formatsys_log" >操作 </th>
</tr>
</thead>
</table>
</div>
</div> <script type="text/html" id="log-view-template">
<div id="logView" style="margin:5px 0;font-size:12px;white-space:nowrap;"> </div>
</script> <%@ include file="/common/foot.jsp"%>
<script type="text/javascript" src="viewModel/sys/log.js"></script>
<script type="text/javascript">
using(['messager', 'dialog']);
ko.bindingViewModel(new viewModel());
var formatsys_log = function (value) {
var html = '<a href="javascript:;" onclick=\'view("' + value + '")\'><span class="icon icon-search">&nbsp;</span>[查看]</a>';
html += '<a href="'+rootPath+'/sys/log!download.do?fileName='+value+'" style="margin-left:10px"><span class="icon icon-download">&nbsp;</span>[下载]</a>';
return html;
};
</script>
</body>
</html>

  

  2. log.js:实现日志管理列表、功能,日志查看

function viewModel(){
var self = this;
this.form = {logDate:ko.observable()}; this.system = {
size: { w: 6, h: 123 },
url: rootPath+"/sys/log!getSystemLog.do",
queryParams: ko.observable(),
pagination: true
}; this.refreshClick = function () {
window.location.reload();
}; this.searchClick = function () {
this.system.queryParams(ko.toJS(this.form));
}; this.clearClick = function () {
this.form.logDate("");
this.searchClick();
}
}; var view = function (id) {
com.dialog({
title: "查看日志",
width: 700,
height: 500,
maximizable: true,
html: "#log-view-template",
viewModel: function (w) {
com.ajax({
type: "GET",
url: rootPath+"/sys/log!view.do?fileName=" + id,
success: function (d) {
w.find("#logView").html(d);
}
})
}
});
};

  3. logController.java

package com.ims.web.controller.sys;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView; import com.ims.common.DateUtil;
import com.ims.common.FileUtil.FileAttr;
import com.ims.common.FileUtil; @Controller
@RequestMapping("sys")
public class LogController extends SysBaseController{
@RequestMapping("log")
public ModelAndView log(){
ModelAndView view = new ModelAndView("sys/log.jsp");
return view;
} @RequestMapping("log!getSystemLog")
public void getSystemLog(@RequestParam Map<String, String> params){
FileAppender appender = (FileAppender)Logger.getRootLogger().getAppender("roll");
String filePath = appender.getFile();
String logFileName = filePath.substring(filePath.lastIndexOf("/")+1, filePath.length());
File folders = new File(filePath.substring(0, filePath.lastIndexOf("/")+1));
String[] files = folders.list();
if(StringUtils.isNotBlank(params.get("logDate"))){
Map<String,String> date = DateUtil.getStartEndDate(params.get("logDate"));
List<String> newFiles = new ArrayList<String>();
for(String fileName:files){
String temp = fileName;
if(logFileName.equals(fileName)){
temp = fileName+"."+DateUtil.getCurrDate();
}
temp = temp.substring(logFileName.length()+1, temp.length()) + " 00:00:00";
if(StringUtils.isNotBlank(date.get("startDate"))){
if(temp.compareTo(date.get("startDate"))<0){
continue;
}
}
if(StringUtils.isNotBlank(date.get("endDate"))){
if(temp.compareTo(date.get("endDate"))>0){
continue;
}
}
newFiles.add(fileName);
}
files = (String[])newFiles.toArray(new String[newFiles.size()]);
} Map<String, Object> result = new HashMap<String, Object>();
result.put("total", files.length); Integer page = Integer.valueOf(params.get("page"));
Integer rows = Integer.valueOf(params.get("rows"));
files = Arrays.copyOfRange(files, (page-1)*rows, page*rows); List<FileAttr> fileList = new ArrayList<FileAttr>();
for(String fileName:files){
if(fileName!=null){
FileAttr fileAttr = new FileAttr();
fileAttr.setId(fileName);
fileAttr.setFileName(fileName);
File file = new File(folders.getAbsolutePath()+"\\"+fileName);
fileAttr.setFileSize(file.length()/1024+" KB");
fileList.add(fileAttr);
}
} result.put("rows", fileList);
ajaxJson(result);
} @RequestMapping("log!view")
public void view(String fileName){
FileAppender appender = (FileAppender)Logger.getRootLogger().getAppender("roll");
String filePath = appender.getFile();
File folders = new File(filePath.substring(0, filePath.lastIndexOf("/")+1));
String log = FileUtil.readFileByLines(folders.getAbsolutePath()+"\\"+fileName);
ajaxJson(log);
} @RequestMapping("log!download")
public void download(String fileName){
try{
FileAppender appender = (FileAppender)Logger.getRootLogger().getAppender("roll");
String filePath = appender.getFile();
File folders = new File(filePath.substring(0, filePath.lastIndexOf("/")+1));
String path = folders.getAbsolutePath()+"\\"+fileName;
File file = new File(path);// path是根据日志路径和文件名拼接出来的
String filename = file.getName();// 获取日志文件名称
InputStream fis = new BufferedInputStream(new FileInputStream(path));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
response.reset();
// 先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,这个文件名称用于浏览器的下载框中自动显示的文件名
response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.replaceAll(" ", "").getBytes("utf-8"),"iso8859-1"));
response.addHeader("Content-Length", "" + file.length());
OutputStream os = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
os.write(buffer);// 输出文件
os.flush();
os.close();
}catch(Exception e){
ajaxJson(STATUS_ERROR, "日志文件下载失败");
}
}
}

二. 效果图

  1. 访问:http://localhost:8080/ims/sys/log.do,日志管理界面

  2. 点击 查看

基于easyUI实现系统日志管理的更多相关文章

  1. 基于EasyUI Treegrid的权限管理资源列表

    1. 前言 最近在开发系统权限管理相关的功能,主要包含用户管理,资源管理,角色管理,组类别管理等小的模块.之前的Web开发中也用过jQueryEasyUI插件,感觉这款插件简单易用,上手很快.以前用到 ...

  2. 基于WebForm+EasyUI的业务管理系统形成之旅 -- ParamQueryGrid行、列合并(Ⅸ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 施工计划查询(Ⅷ)>,主要介绍通过报表工具数据钻取,获取施工计划详细信息. 这篇我们看看ParamQueryGrid[行 ...

  3. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 施工计划查询(Ⅷ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 施工计划安排>,主要介绍整个施工计划列表与编辑界面. 下面看看施工计划查询(ⅠⅡⅢ ⅣⅤⅥ Ⅶ Ⅷ) 一.施工计划查询 ...

  4. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 施工计划安排(Ⅶ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 首页Portal界面拖拽>,主要介绍首页随客户喜好安排区块位置,更好的实现用户体验. 这两天将项目中施工计划管理归纳总结 ...

  5. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 首页Portal界面拖拽(Ⅵ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 构建Web界面>,主要介绍系统界面布局.导出数据等. 本篇将介绍首页Portal界面拖拽. 一.首页Portal界面拖拽 ...

  6. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 构建Web界面(Ⅴ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 数据统计>,主要介绍系统数据统计所采用图形.报表工具. 本篇将如何构建Web界面以及新增.编辑.导出数据等功能. 一.在 ...

  7. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 数据统计(Ⅳ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 首页快捷方式>,主要介绍通过添加首页快捷方式,快速进入各个应用菜单功能. 将常用的菜单功能作为快捷方式,避免由于寻找诸多 ...

  8. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 首页快捷方式(Ⅲ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 登录窗口>,主要是介绍系统登录界面页面设计与代码. 最近刚做完施工计划安排设计,之后将分享出来,这个系列更新不是很快,望 ...

  9. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 登录窗口(Ⅱ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 系统设置>,主要是介绍系统浏览器在线下载安装,这些前期准备是非常重要的. 最近忙于将工程管理系统中各个模块,用业务流程方 ...

随机推荐

  1. springMVC引入js,css文件404

    在web.xml中配置静态资源文件过滤 <!--静态文件引入--> <servlet-mapping> <servlet-name>default</serv ...

  2. PHP初步:在Mac OS X Yosemite下搭建Apache+PHP+Mysql

    Mac OS X是基于unix的操作系统,很多软件都集成在系统中.所以,对于配置PHP的开发环境相对于windows和Linux更简单. 1. 启动Apache服务器 打开终端(terminal),查 ...

  3. POJO和Javabean的区别:

    pojo:存粹java类,不继承,不实现.(不受限制的java类),多用于指数据库的映射对象javaBean:可复用组件,由容器(tomcat)创建,因此应具有无参构造器,不能跨进程访问,通常要无方法 ...

  4. linux 常用命令手册

    命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂的还有info,但不常用. help 查看Linux内置命令的帮助,比如cd命令. 文件和目录操作命令(18个) l ...

  5. 自己动手——快速搭建Android应用服务器

    1.服务器搭建方案选择 我们用:MySQL + Java Web + Tomcat + Volley 来实现我们的服务器. 其中:①MySQL是开源的数据库软件:②Java Web是遵循Java语言风 ...

  6. python全栈开发_day12_装饰器

    一:装饰器 1)什么是装饰器 装饰器的本质就是利用闭包,在满足开放(修改函数锁包含的功能)封闭(不改变源代码)的情况下完成操作. 2)装饰器的基本运用 def name_judge(f): def a ...

  7. nodejs之socket.io 私发消息和选择群组发消息

    写在前面:其实有的时候忙碌是好的,比如忙碌起来的自己手机可以一天耗费掉只有20%的电,忙碌的自己很专心于一件事情,但是忙碌不等于过度疲劳,本周忙碌有点上脑,迷糊了一天,都在补觉,还是要去平衡下自己一天 ...

  8. $bzoj1019-SHOI2008$ 汉诺塔 $dp$

    题面描述 汉诺塔由三根柱子(分别用\(A\ B\ C\)表示)和\(n\)个大小互不相同的空心盘子组成.一开始\(n\)个盘子都摞在柱子\(A\)上,大的在下面,小的在上面,形成了一个塔状的锥形体. ...

  9. 文献综述十七:基于 sql环境下超市管理系统的设计与实现

    一.基本信息 标题:基于 sql环境下超市管理系统的设计与实现 时间:2018 出版源:智能计算机与应用 文件分类:uml技术的研究 二.研究背景 从超市管理系统的实际应用出发,在系统分析过程中,从功 ...

  10. DP Intro - poj 1947 Rebuilding Roads(树形DP)

    版权声明:本文为博主原创文章,未经博主允许不得转载. Rebuilding Roads Time Limit: 1000MS   Memory Limit: 30000K Total Submissi ...