我在基于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日志中。这样我就可以将这个注释应用到我需要这个日志的方法中,我不知道如何实现这一点,你能帮助我吗?
由于
答案 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);
}