之前公司做对c端用户被修改信息计入日志的操作,最开始是将修改前后的对象以JSON拼接存入日志表的,后来发现有的拼接出的内容太长,大部分没有修改的字段没有必要存入日志。所以现在改成只对修改的字段存入日志。
/**
* 只对被操作对象发生修改的字段记入日志
* @param beforeObj
* @param afterObj
* @author lihao
* @date 2020-12-19
* @return String
*/
@Override
public String logSetContent(Object beforeObj, Object afterObj) {
Field[] fields = beforeObj.getClass().getDeclaredFields();
String context = "";
for(int i=0 ; i<fields.length ; i++)
{
String fieldName = fields[i].getName();
if(fieldName.equals("serialVersionUID")) {continue;}
String firstField = fieldName.substring(0 , 1).toUpperCase();
String getter = "get" + firstField + fieldName.substring(1);
Method method = null;
Object beforeValue=null;
Object afterValue = null;
try {
method = beforeObj.getClass().getMethod(getter, new Class[] {});
beforeValue = method.invoke(beforeObj, new Object[] {});
method = afterObj.getClass().getMethod(getter, new Class[] {});
afterValue= method.invoke(afterObj, new Object[] {});
} catch (Exception e) {
e.printStackTrace();
log.info("错误日志: 错误信息:" + e.getMessage() + "类:" + e.getClass());
}
if(beforeValue != null && afterValue != null)
{
System.out.println(beforeValue + " : " +afterValue);
if(!beforeValue.toString().equals(afterValue.toString()))
{
context += fieldName + ":" + beforeValue.toString() + "--" + fieldName + afterValue.toString();
}
}
}
return context;
}
最近老悲观了 每天这么辛苦是为了什么呀 哎