系統操作日誌的實現原理
阿新 • • 發佈:2019-02-16
定義操作日誌實體
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} 使用者