程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 在springmvc中使用系統日志,記錄service服務層的詳細功能調用,springmvcservice

在springmvc中使用系統日志,記錄service服務層的詳細功能調用,springmvcservice

編輯:JAVA綜合教程

在springmvc中使用系統日志,記錄service服務層的詳細功能調用,springmvcservice


思路:

  aop :利用aop的橫切面的思路,在每個service中的方法執行之後,執行一個日志存儲的功能.

具體步驟:

  1.先定義一個日志模型,定義需要存儲哪些日志操作信息.

  2.編寫mapper接口,定義日志的CRUD或其他的功能

  3.配置mapper映射文件的各種sql查詢以及查詢結果中的列與對象屬性的對應,完成對象與數據庫的映射.

  4.編寫service服務層代碼,封裝mapper(Dao)的功能.

  5.編寫LogUtil類,,定義WriteLog(JoinPoint jp)方法,JoinPoint jp為spring在這個方法調用時為我們傳遞,即連接點.

      [注:

      切面包括以下部分:
      * 切入點 (在哪裡做事情)
      * 通知 (增強)
      * 連接點 (切入時的上下文信息)

      ]

   接下來,就在該方法內獲取當前執行的方法的各種信息,並封裝到我們的日志模型中,並持久化到數據庫中.

具體代碼:

package com.tab.crm.utils;

import java.util.Date;

import org.aspectj.lang.JoinPoint;

import com.tab.crm.domain.SystemLog;
import com.tab.crm.service.ISystemLogService;

public class SystemLogUtils {
    // 注入日志的services
    private ISystemLogService service;

    public void setService(ISystemLogService service) {
        this.service = service;
    }

    // 日志寫入方法
    @SuppressWarnings("rawtypes")
    public void writeLog(JoinPoint jp) {
        // 獲取當前方法所在的對象
        Object targetObj = jp.getTarget();
        // 如果進入了log的service中則退出該方法,解決死循環
        if (targetObj instanceof ISystemLogService) {
            return;
        }

        // System.out.println(jp.getClass());
        // System.out.println(jp.getKind());
        // System.out.println(jp.getThis());
        SystemLog log = new SystemLog();
        //使用封裝了自定義的ActionContext的UserContext獲取當前session中的user對象
        log.setOpUser(UserContext.getUser());
        //使用封裝了自定義的ActionContext的UserContext獲取當前request中的ip地址
        log.setOpIp(UserContext.getOpIp());
        log.setOpTime(new Date());
        // 獲取當前的正在執行的service類
        Class serviceClz = jp.getTarget().getClass();
        // 獲取當前的正在執行的方法名
        String methodName = jp.getSignature().getName();
        log.setFunction(serviceClz.getName() + "." + methodName);
        service.save(log);
    }
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved