@VisibleForTesting static void redirectToLogger(SessionState sessionState, Logger logger) { Logger logOut = (logger == null) ? LoggerFactory.getLogger("Explore.stdout") : logger; Logger logErr = (logger == null) ? LoggerFactory.getLogger("Explore.stderr") : logger; sessionState.err = new PrintStream(RedirectedPrintStream.createRedirectedErrStream(logErr, null), true); sessionState.out = new PrintStream(RedirectedPrintStream.createRedirectedOutStream(logOut, null), true); sessionState.childErr = new PrintStream(RedirectedPrintStream.createRedirectedErrStream(logErr, null), true); sessionState.childOut = new PrintStream(RedirectedPrintStream.createRedirectedOutStream(logOut, null), true); }
/** * Creates {@link RedirectedPrintStream} from given outstream which will be redirected to given logger. * @param logger logger object to which outstream will be redirected to. * @param outStream output stream which will be redirected to logger object. * @return The instance of a {@link RedirectedPrintStream}. */ public static RedirectedPrintStream createRedirectedOutStream(Logger logger, @Nullable PrintStream outStream) { return new RedirectedPrintStream(logger, outStream, false); }
@Override public void flush() throws IOException { if (outStream != null) { outStream.flush(); } out.flush(); // Write out buffered data, line by line. // The last line may not be written out if it doesn't have a line separator. int len = buffer.bytesBefore((byte) '\n'); while (len >= 0) { if (len == 0) { log(""); } else { CharSequence line = buffer.readCharSequence(len, StandardCharsets.UTF_8); if (line.charAt(line.length() - 1) == '\r') { line = line.subSequence(0, line.length() - 1); } log(line.toString()); } // Read the '\n' buffer.readByte(); len = buffer.bytesBefore((byte) '\n'); } if (!buffer.isReadable()) { buffer.clear(); } else { buffer.discardReadBytes(); } }
@Override public void flush() throws IOException { if (outStream != null) { outStream.flush(); } out.flush(); // Write out buffered data, line by line. // The last line may not be written out if it doesn't have a line separator. int len = buffer.bytesBefore((byte) '\n'); while (len >= 0) { if (len == 0) { log(""); } else { CharSequence line = buffer.readCharSequence(len, StandardCharsets.UTF_8); if (line.charAt(line.length() - 1) == '\r') { line = line.subSequence(0, line.length() - 1); } log(line.toString()); } // Read the '\n' buffer.readByte(); len = buffer.bytesBefore((byte) '\n'); } if (!buffer.isReadable()) { buffer.clear(); } else { buffer.discardReadBytes(); } }
@VisibleForTesting static void redirectToLogger(SessionState sessionState, Logger logger) { Logger logOut = (logger == null) ? LoggerFactory.getLogger("Explore.stdout") : logger; Logger logErr = (logger == null) ? LoggerFactory.getLogger("Explore.stderr") : logger; sessionState.err = new PrintStream(RedirectedPrintStream.createRedirectedErrStream(logErr, null), true); sessionState.out = new PrintStream(RedirectedPrintStream.createRedirectedOutStream(logOut, null), true); sessionState.childErr = new PrintStream(RedirectedPrintStream.createRedirectedErrStream(logErr, null), true); sessionState.childOut = new PrintStream(RedirectedPrintStream.createRedirectedOutStream(logOut, null), true); }
/** * Creates {@link RedirectedPrintStream} from given outstream which will be redirected to given logger. * @param logger logger object to which outstream will be redirected to. * @param outStream output stream which will be redirected to logger object. * @return The instance of a {@link RedirectedPrintStream}. */ public static RedirectedPrintStream createRedirectedOutStream(Logger logger, @Nullable PrintStream outStream) { return new RedirectedPrintStream(logger, outStream, false); }
/** * Redirect standard out and error to logger * @param loggerName Name of the logger to which stdout */ public static void redirectToLogger(String loggerName) { Logger logger = LoggerFactory.getLogger(loggerName); System.setOut(new PrintStream(RedirectedPrintStream.createRedirectedOutStream(logger, System.out), true)); System.setErr(new PrintStream(RedirectedPrintStream.createRedirectedErrStream(logger, System.err), true)); } }
/** * Creates {@link RedirectedPrintStream} from given errorstream which will be redirected to given logger. * @param logger logger object to which outstream will be redirected to. * @param errorStream error stream which will be redirected to logger object. * @return The instance of a {@link RedirectedPrintStream}. */ public static RedirectedPrintStream createRedirectedErrStream(Logger logger, @Nullable PrintStream errorStream) { return new RedirectedPrintStream(logger, errorStream, true); }
/** * Redirect standard out and error to logger * @param loggerName Name of the logger to which stdout */ public static void redirectToLogger(String loggerName) { Logger logger = LoggerFactory.getLogger(loggerName); System.setOut(new PrintStream(RedirectedPrintStream.createRedirectedOutStream(logger, System.out), true)); System.setErr(new PrintStream(RedirectedPrintStream.createRedirectedErrStream(logger, System.err), true)); } }
/** * Creates {@link RedirectedPrintStream} from given errorstream which will be redirected to given logger. * @param logger logger object to which outstream will be redirected to. * @param errorStream error stream which will be redirected to logger object. * @return The instance of a {@link RedirectedPrintStream}. */ public static RedirectedPrintStream createRedirectedErrStream(Logger logger, @Nullable PrintStream errorStream) { return new RedirectedPrintStream(logger, errorStream, true); }