日誌攔截打印返回的數據格式

/**
 * 打印請求後返回的數據格式
 *
 */
@Aspect
@Component
@Slf4j
public class LogAop {

  @Autowired
  private ObjectMapper objectMapper;
  
  private static final String LOG = "ip: {}  ,url:{}  ,params: {}, responseBody: {}";

  @Around("execution(* controller包路勁..*(..))")
  public Object printLog(ProceedingJoinPoint point) throws Throwable {
    Object result = null;
    // 接收到請求,記錄請求內容
    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    if(attributes!=null) {
      result =point.proceed();
      if(result!=null) {
        HttpServletRequest request= attributes.getRequest();
        log.info(LOG, IPUtils.getIpAddr(request), request.getRequestURI(), HttpUtils.getParameterStringMap(request),objectMapper.writeValueAsString(result));
       
      }
    }
    return result; 
  }
}



public class HttpUtils {
  
  public static Map<String, String> getParameterStringMap(HttpServletRequest request) {
    Map<String, String[]> properties = request.getParameterMap();// 把請求參數封裝到Map<String, String[]>中
    Map<String, String> returnMap = new TreeMap<String, String>();
    String name = "";
    String value = "";
    for (Map.Entry<String, String[]> entry : properties.entrySet()) {
      name = entry.getKey();
      if (!"files".startsWith(name)) {
        String[] values = entry.getValue();
        if (null == values) {
          value = "";
        } else if (values.length > 1) {
          for (int i = 0; i < values.length; i++) { // 用於請求參數中有多個相同名稱
            value = values[i] + ",";
          }
          value = value.substring(0, value.length() - 1);
        }else if (value.length()==0){
           value="";
        }
        else {
          value = values[0];// 用於請求參數中請求參數名唯一
        }
        returnMap.put(name, value);

      }
    }

    return returnMap;
  }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章