/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.ambari.view.hive2.utils; import org.slf4j.Logger; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; public class LoggingOutputStream extends OutputStream { private final ByteArrayOutputStream baos = new ByteArrayOutputStream(1000); private final Logger logger; private final LogLevel level; public enum LogLevel { TRACE, DEBUG, INFO, WARN, ERROR, } public LoggingOutputStream(Logger logger, LogLevel level) { this.logger = logger; this.level = level; } @Override public void write(int b) { if (b == '\n') { String line = baos.toString(); baos.reset(); switch (level) { case TRACE: logger.trace(line); break; case DEBUG: logger.debug(line); break; case ERROR: logger.error(line); break; case INFO: logger.info(line); break; case WARN: logger.warn(line); break; } } else { baos.write(b); } } /** * Closes this output stream and releases any system resources * associated with this stream. The general contract of <code>close</code> * is that it closes the output stream. A closed stream cannot perform * output operations and cannot be reopened. * <p/> * The <code>close</code> method of <code>OutputStream</code> does nothing. * * @throws IOException if an I/O error occurs. */ @Override public void close() throws IOException { baos.close(); } }