@SLog
上面是常用的开启注释型日志异步记录功能,不过最近在集成的时候发现一个问题,就是不管这个被注解的方法是否成功执行,它都会执行拦截。 如果要想实现只当被注解的方法执行成功时才拦截的话,有何思路建议下呢?
Nutz用的是最新版本,不过SLOG没有插件而是把源码集成进来以,对储存SQL的内容做了些更新。
public @interface SLog {
String content();
String module();
String type();
boolean async() default true;
}
调用代码的地方:
@At
@POST
@SLog(module = Constants.MODULE_SYSTEM, type = Constants.OPERATE_TYPE_ADD,
content = "新增【${args[0].companyName}】公司信息")
public AjaxReturn addNew(@Param("..") Company company) {
AjaxReturn ar = Ajax.ok();
boolean flag = companyService.add(company);
ar.setOk(flag);
if (!flag) {
ar.setMsg("新增公司信息失败,请联系管理员.");
}
return ar;
}
Dao的增加方法:
public boolean add(Company company) {
boolean add = false;
company.setCreateTime(new Date());
company.setDataStatus("0");
try {
Company insertTemp = _insert(company);
add = insertTemp != null;
} catch (Exception e) {
logger.error(company);
logger.error("Insert new company info failed.", e);
}
return add;
}
这里有个字段设置成了unique, 所以在插入时报错了,不过个异常没有被抛出的,这种情况下SLOG可以跳转不记录此次操作日志么?
PS: 这个代码只是在调试阶段,正式发布是要做个检测,只是由此发现这个问题,想想是否有办法解决。
@wendal 你的建议是?加入threadlocal貌似是可以的,只是会不会太频繁了呢?