Day39项目saas-export项目-系统日志管理**

标签: 202009就业班  java  mybatis  spring

系统日志管理

  • (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

分页查询
添加

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:spring/applicationContext-*.xml")
public class TestSysLogService {
    private static final Logger l = LoggerFactory.getLogger(TestSysLogService.class);
    @Autowired
    ISysLogService iSysLogService;
    //增*删改查*
    @Test
    public void test01(){
        //分页列表
        //页面上显示分页列表,就要求业务方法中提供查询PageInfo的方法
        PageInfo<SysLog>  pi= iSysLogService.findByPage(1,3,"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.wzx.web.company.CompanyController");

      sysLog.setCompanyId("1");
      sysLog.setCompanyName("吉首大学");
      iSysLogService.saveSysLog(sysLog);

    }


}

ISysLogService,SysLogServiceImpl

public interface ISysLogService {
    PageInfo<SysLog> findByPage(int curr, int pageSize, String companyId);
    void saveSysLog(SysLog sysLog);
}
@Service
public class SysLogServiceImpl implements ISysLogService {
    //service调用dao
    @Autowired
    ISysLogDao iSysLogDao;
    @Override
    public PageInfo<SysLog> findByPage(int curr, int pageSize, String companyId) {
        //设置参数
        PageHelper.startPage(curr,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,ISysLogDao.xml

public interface ISysLogDao {
    List<SysLog> findAll(String companyId);
    void save(SysLog sysLog);
}

<?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.wzx.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
        (
        id            ,
        user_name     ,
        ip            ,
        time          ,
        method        ,
        ACTION        ,
        company_id    ,
        company_name
        )
        values
        (
        #{id            },
        #{userName      },
        #{ip            },
        #{time          },
        #{method        },
        #{action        },
        #{companyId     },
        #{companyName   }
        )
    </insert>
</mapper>

SysLogController,xxx.jsp


@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 curr, @RequestParam(defaultValue = "3") int pageSize) {
        //调查询分页列表的方法
        PageInfo<SysLog> pi = iSysLogService.findByPage(curr, pageSize, getLoginCompanyId());
        //将pi添加到页面
        request.setAttribute("pi", pi);
        return "system/syslog/log-list";
    }
}
 <c:forEach items="${pi.list}" var="log"  varStatus="st">
                        <tr>
                            <td>${st.count }</td>
                            <td>${log.userName }</td>
                            <td>${log.ip}</td>
                            <td>${log.time}</td>
                            <td>${log.action}.${log.method}</td>

                        </tr>
                    </c:forEach>

系统日志管理 优化日志列表

  • (1)分析
    日志记录多,生成的页号按钮多
  • (2)实现
    控制循环次数
    并进行边界判断

在这里插入图片描述
在这里插入图片描述

<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>
版权声明:本文为u013621398原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013621398/article/details/109503613

智能推荐

LeetCode(7 整数反转)

如题 这就不用分析了,直接依次取每位即可,难点就是个越界判断...

Caused by: java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception

启动RMI报如下错误: 最后发现是端口冲突造成的,当时用的5003端口启动服务端的RMI刚好和本地的一个服务端口冲突。 输入netstat -aon|findstr "5003"查询它的pid为3056 继续输入tasklist|findstr "3056",查看是哪个进程或者程序占用了5003端口,结果是:magentproc.exe 找到PID后可以直接...

【LeetCode(Java) - 322】零钱兑换

文章目录 1、题目描述 2、解题思路 3、解题代码 1、题目描述 2、解题思路   定义 dp[i] 表示对于组成金额 i 的最少硬币个数。   如果方案存在,那么至少有一个硬币至少出现了一次:   如果是第 0 个硬币出现了一次,则:dp[i] = dp[i-coins[0]] + 1   如果是第 1 个硬币出现了...

在Visual Studio 2013中配置Entity Framework使用MySQL

环境 使用的软件及版本 - Microsoft Visual Studio Ultimate 2013 (版本 12.0.40629.00 Update 5) - Microsoft.Net Framework 版本 4.6.01055 - MySQL版本: 5.6.17 步骤 1. 创建空的MVC项目 2. 安装扩展 3. 在数据库中建立对应的表 必须在数据库内先新建表,否则asp.net mv...

Python才是世界上最好的言语,php,java靠边站

伟大的入门编程语言有什么特征呢?或者换一种方式问,“当我们教他们编程时,应该给予他们什么?”对于成年人和青少年学生,我认为以下五点非常重要。 学生从入门语言获得的五样东西 非常棒的首次体验,就像一本书的第一页,首先需要“入迷”,学习新知识不可避免的会遇到挫折,但要有持续的热情和好奇心,这对于那些从未接触过编码的年轻人来说是至关重要的; Web编程的能...

猜你喜欢

动态调整docker容器cpu资源

目的:动态调整系统cpu核数后,如何在不停止容器服务的情况下,docker动态使用最新的CPU资源 事件由来:     1、在ucloud上购买了一台可以热升级的机器,热升级指的是动态更改系统cpu和内存资源     2、随着业务的扩展,发现cpu、内存负载过高,需要在不停止业务的情况下动态扩容,因此使用了ucloud提供的热升级服务,从4核12G扩容为8核...

用python itchat包 爬取微信好友头像形成矩形头像集

原创作品,转载请注明作者 abysscarry-袁杰丶 初学python,我们必须干点有意思的事!从微信下手吧! 头像集样例如下: 大家可以发朋友圈开启辨认大赛哈哈~ 话不多说,直接上代码,注释我写了比较多,大家应该能看懂 运行结果: ok!!!...

impala实现拉链表

1.文档目的         拉链表是针对数据仓库设计中表存储数据的方式而定义的,即是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。传统数据仓库一般采用拉链的方式保留主数据(例如客户信息)的变化数据,采用这种设计方式的主要原因是减少数据冗余。这个需求在Hadoop中主要是有以下两种实现方式选择: 每天保留一份全量的切片数据。Hadoop平台由...

Codeforce 975E

E. Hag's Khashba time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard output Hag is a very talented person. He has always had an artist inside him but his...

Gradle基础知识

Gradle基础知识 Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目配置,摒弃了传统基于XML(Ant和Maven)的各种繁琐配置。 Gradle作为Android的构建系统,主要作用是编译应用资源和源代码,将其打包成可供测试、部署、签署和分发的APK。 Android Studio使用Gradle这个高级构建工具包来自动化执行和管理构建流...