1. 程式人生 > >系統操作日誌的實現原理

系統操作日誌的實現原理

定義操作日誌實體

public class SystemOperationLog extends BaseEntity {

    /**
     * 
     */
    private static final long serialVersionUID = 8596392701331679567L;

    /**
     * 操作人
     */
    private String operator;

    /**
     * 日誌型別
     */
    private String logType;

    /**
     * 建立時間
     */
    private
Date createTime; /** * 日誌詳情 */ private String logDetail; public String getOperator() { return operator; } public void setOperator(String operator) { this.operator = operator; } public String getLogType() { return logType; } public
void setLogType(String logType) { this.logType = logType; } public Date getCreateTime() { if(createTime!=null){ return (Date)createTime.clone(); } return null; } public void setCreateTime(Date createTime) { if(createTime!=null){ this
.createTime = (Date)createTime.clone(); }else{ this.createTime = null; } } public String getLogDetail() { return logDetail; } public void setLogDetail(String logDetail) { this.logDetail = logDetail; } }

定義日誌格式和類別的常量類

public interface LogMessageConstant {


    //******************begin****操作日誌對應型別*******************************
    /**
     * 客戶開通
     */
    public static final String LogType_customer_open = "0";
    /**
     * 服務開通
     */
    public static final String LogType_service_open = "1";
    /**
     * 訂購關係變更
     */
    public static final String LogType_subscriber_order_change = "2";

    /**
     * 賬戶充值
     */
    public static final String LogType_account_recharge = "3";

    /**
     * 產品訂購
     */
    public static final String LogType_order_product = "4";

    /**
     * 使用者登出
     */
    public static final String LogType_user_termination = "5";


    //**************************操作日誌詳情資訊***************************
    /**
     * 服務開通詳細資訊
     */
    public static final String MSG_Service_open = "操作員 {0} 客戶 {1} 開通服務";
    /**
     * 客戶開通詳情
     */
    public  static final String MSG_Customer_open= "操作員 {0} 為客戶 {1} 開戶";
    /**
     * 賬戶充值
     */
    public static final String  MSG_Account_recharge="操作員 {0} 為客戶 {1} 充值 {2} 元";

    /**
     * 使用者訂購套餐
     */
    public static final String  MSG_order_main="操作員 {0} 為客戶 {1} 訂購 {2} 產品";

    /**
     * 使用者修改訂購套餐
     */
    public static final String  MSG_order_update="操作員 {0} 為客戶 {1} 修改訂購 {2} 產品";

    /**
     * 使用者
     */
    public static final String  MSG_order_cancel="操作員 {0} 為客戶 {1} 取消產品 {2} 訂購";

    /**
     * 使用者登出
     */
    public static final String  MSG_user_termination="操作員 {0} 為客戶 {1} 登出 {2} 使用者";   
}

業務介面方法

/**
    * @Title: listOperLog 
    * @Description: 根據條件獲取操作日誌 分頁記錄資訊
    * @param @param pageParam
    * @param @param params
    * @param @return
    * @return PageBean<SystemOperationLog>
     */
    public PageBean<SystemOperationLog> listOperLog(PageParam pageParam,Map<String,Object> params);
    /**
    * @Title: saveLog 
    * @Description: 儲存系統操作日誌
    * @param @param log
    * @param @param params
    * @param @return
    * @return boolean
     */
    public boolean saveOperationLog(SystemOperationLog log, Map<Integer,String> params);

業務介面實現

public boolean saveOperationLog(SystemOperationLog log, Map<Integer,String> params) {
        String logDetail = log.getLogDetail();

        if(StringUtil.isNotNull(logDetail)){
            for(int i=0;i<params.size();i++){
                String value = params.get(Integer.valueOf(i));
                logDetail = logDetail.replace("{"+i+"}", value);
            }
            log.setLogDetail(logDetail);
            insert(log);
            return true;
        }
        return false;
    }

使用方式

Map<Integer,String> pm = new HashMap<>();
pm.put(0,customerInfo.getCreateOperator());
pm.put(1,customerInfo.getCustomerName());
SystemOperationLog log = new SystemOperationLog();
log.setLogType(LogMessageConstant.LogType_customer_open);
        log.setCreateTime(UTCTimeUtil.getLocalTimeFromUTC(sdf.format(customerInfo.getCreateTime())));
log.setOperator(customerInfo.getCreateOperator());
log.setLogDetail(LogMessageConstant.MSG_Customer_open);

systemOperationLogService.saveOperationLog(log, pm);

使用總結

對於操作日誌這種資料,可以儲存在mysql,也可以儲存在mongodb資料庫中,鑑於此種業務只需要做儲存和查詢功能,所以一般都儲存在mongodb資料庫中。只要操作日誌的儲存過程開發完畢,當有新的型別操作日誌時,只需要增加對應的日誌型別和詳情資訊的格式定義即可。例如:操作員 {0} 為客戶 {1} 登出 {2} 使用者