### Question:
Log { private Log() { } private  Log(); static Func1<T, T> tab(); static Func1<T, T> tab(Object prefix); static Func1<T, T> tabf(String format); static T log(T value); static T log(Object prefix, T value); static T log(Object prefix, T value, Object suffix); @SuppressWarnings("unchecked") static FuncList<T> logEach(T ... values); static FuncList<T> logEach(String prefix, Collection<T> values); static FuncList<T> logEach(String prefix, Collection<T> values, String suffix); static T logBy(Supplier<T> supplier); static T logErr(T throwable); static T logErr(Object prefix, T throwable); static T logErr(Object prefix, T throwable, Object suffix);  }### Answer:
@Test public void testLog() { val stub = new Console.Stub(); With(Env.refs.console.butWith(stub)) .run(()->{ Log.log("One"); Log.log("2: ", "Two", " --"); Log.logEach("Three", "Four"); Log.logEach("-->", listOf("Three", "Four"), "<--"); Log.logBy(()-> "42"); val outLines = StreamPlus.from(stub.outLines()).toJavaList(); assertEquals( "[" + "One, " + "2: Two --, " + "Three, Four, " + "-->Three<--, -->Four<--, " + "42" + "]", outLines.toString()); stub.clearOutLines(); }); }