diff --git a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java index 6c56212c9e..4dca758b91 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java @@ -44,6 +44,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.ReentrantLock; +import org.apache.commons.io.output.TeeOutputStream; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.hadoop.conf.Configuration; @@ -1083,6 +1084,22 @@ public void setLastCommand(String lastCommand) { protected Logger LOG; protected boolean isSilent; + static class DecoratedStream extends PrintStream { + public DecoratedStream(PrintStream stream) { + super(getThreadLocalOpLogStream() == null + ? stream : new TeeOutputStream(stream, getThreadLocalOpLogStream())); + } + + private static PrintStream getThreadLocalOpLogStream() { + if (OperationLog.getCurrentOperationLog() != null) { + if (OperationLog.getCurrentOperationLog().getPrintStream() != null) { + return OperationLog.getCurrentOperationLog().getPrintStream(); + } + } + return null; + } + } + public LogHelper(Logger LOG) { this(LOG, false); } @@ -1098,7 +1115,8 @@ public LogHelper(Logger LOG, boolean isSilent) { */ public PrintStream getOutStream() { SessionState ss = SessionState.get(); - return ((ss != null) && (ss.out != null)) ? ss.out : System.out; + return new DecoratedStream(((ss != null) + && (ss.out != null)) ? ss.out : System.out); } /** @@ -1107,7 +1125,8 @@ public PrintStream getOutStream() { */ public static PrintStream getInfoStream() { SessionState ss = SessionState.get(); - return ((ss != null) && (ss.info != null)) ? ss.info : getErrStream(); + return new DecoratedStream(((ss != null) + && (ss.info != null)) ? ss.info : getErrStream()); } /** @@ -1116,7 +1135,8 @@ public static PrintStream getInfoStream() { */ public static PrintStream getErrStream() { SessionState ss = SessionState.get(); - return ((ss != null) && (ss.err != null)) ? ss.err : System.err; + return new DecoratedStream(((ss != null) + && (ss.err != null)) ? ss.err : System.err); } /** @@ -1125,7 +1145,8 @@ public static PrintStream getErrStream() { */ public PrintStream getChildOutStream() { SessionState ss = SessionState.get(); - return ((ss != null) && (ss.childOut != null)) ? ss.childOut : System.out; + return new DecoratedStream(((ss != null) + && (ss.childOut != null)) ? ss.childOut : System.out); } /** @@ -1134,7 +1155,8 @@ public PrintStream getChildOutStream() { */ public PrintStream getChildErrStream() { SessionState ss = SessionState.get(); - return ((ss != null) && (ss.childErr != null)) ? ss.childErr : System.err; + return new DecoratedStream(((ss != null) + && (ss.childErr != null)) ? ss.childErr : System.err); } /**