code: public static <V> Callable<V> wrap(final Callable<V> callable) {
  		final String suffix = Log.suffix.get();
  		// t.getCause() is atop t, see Log.concat() for more details
  		final Throwable t = new Throwable(Log.throwable.get());
  		return new Callable<V>() {
  			@Override
  			public V call() throws Exception {
  				threadNum.incrementAndGet();
  				Log.suffix.set(suffix);
  				Log.throwable.set(t);
  				try {
  					return callable.call();
  				} catch (Error e) {
  					throw new Exception(e);
  				} finally {
  					Log.throwable.remove();
  					Log.suffix.remove();
  					threadNum.decrementAndGet();
  				}
  			}
  		};
  	}
docs: Wrap a {@link Callable}
  
  @see #wrap(Runnable)