@AroundInvoke
	public Object transformReturn(InvocationContext context) throws Exception {
		String target = context.getTarget().getClass().getName();
		if (target.contains(WELD)) {
			int i = target.indexOf(WELD);
			target = target.substring(0, i);
		}
		Logger log = LoggerFactory.getLogger(target);
		Method m = context.getMethod();
		boolean v = m.getReturnType().equals(Void.TYPE);
		String line = m.getName() + params(context);
		if (logEnabled) {
			log.info(">>> " + line);
		}
		long before = System.currentTimeMillis();
		Object ret;
		try {
			ret = context.proceed();
		} catch (Exception e) {
			if (logEnabled) {
				log.info("<<< " + line + " ! " + e.getClass().getName());
			}
			throw e;
		}
		long after = System.currentTimeMillis();
		long diff = after - before;
		String retout = "" + ret;
		if (retout.length() > 200) {
			retout = retout.substring(0, 200) + "...";
		}
		if (logEnabled) {
			log.info("<<< " + line + " {" + diff + "} " + (v ? "" : ret));
		}
		if (REPORT) {
			String sn = context.getTarget().getClass().getSimpleName();
			if (sn.contains(WELD)) {
				int i = sn.indexOf(WELD);
				sn = sn.substring(0, i);
			}
		}
		return ret;
	}