NutzCN Logo
问答 是否可以让SLog注解在方法成功时才执行记录呢?
发布于 2799天前 作者 elkan1788 1957 次浏览 复制 上一个帖子 下一个帖子
标签:
@SLog 

上面是常用的开启注释型日志异步记录功能,不过最近在集成的时候发现一个问题,就是不管这个被注解的方法是否成功执行,它都会执行拦截。 如果要想实现只当被注解的方法执行成功时才拦截的话,有何思路建议下呢?

7 回复

判断标准是什么?不抛异常?你把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: 这个代码只是在调试阶段,正式发布是要做个检测,只是由此发现这个问题,想想是否有办法解决。

那根据什么来判断呢?返回值?

加个threadlocal做标记位?

@wendal 你的建议是?加入threadlocal貌似是可以的,只是会不会太频繁了呢?

就是耦合度比较高咯,参考jedis插件

或者再抽象一层,用抛异常来判断。。。

好吧,试试看

添加回复
请先登陆
回到顶部