在Java中创建自定义注释

时间:2015-08-03 12:28:50

标签: java spring log4j

我在基于Spring的应用程序中添加了一些日志,我想记录每个方法,即正在执行操作的用户。您可以在下面找到方法的示例。

@Override
@Transactional
public void deleteAccount(Long id){
    String principal = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    MDC.put("username",principal);
    accountDao.remove(id);
    List<String> action = (List<String>) MDC.get("action");
    if (action == null)
        action=new ArrayList<String>();
    action.add("Deleted account with id:"+id);
    MDC.put("action", action);
}

该方法的前两行是通用的,所以我想要两个避免在每个方法中添加这两行:

String principal = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    MDC.put("username",principal);

所以我想创建一个自定义注释来获取用户并将其放入MDC日志中。这样我就可以将这个注释应用到我需要这个日志的方法中,我不知道如何实现这一点,你能帮助我吗?

由于

1 个答案:

答案 0 :(得分:-7)

为此使用C-macro ..不,严重的是,为什么不使用C-preprocessor呢?只需使用#define为这两行定义宏,然后将文件提供给预处理器。它必须工作。

UPD。这样做:

#define MDCLOG {
    String principal = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    MDC.put("username",principal);
}
public void deleteAccount(Long id) {
    MDCLOG
    accountDao.remove(id);
    List<String> action = (List<String>) MDC.get("action");
    if (action == null)
        action=new ArrayList<String>();
    action.add("Deleted account with id:"+id);
    MDC.put("action", action);
}