View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17
    18  package org.apache.log4j.helpers;
    19
    20  import java.io.Writer;
    21  import java.io.FilterWriter;
    22  import org.apache.log4j.spi.ErrorHandler;
    23  import org.apache.log4j.spi.ErrorCode;
    24
    25
    26  /**
    27     QuietWriter does not throw exceptions when things go
    28     wrong. Instead, it delegates error handling to its {@link ErrorHandler}.
    29
    30     @author Ceki G&uuml;lc&uuml;
    31
    32     @since 0.7.3
    33  */
    34  public class QuietWriter extends FilterWriter {
    35
    36    protected ErrorHandler errorHandler;
    37
    38    public
    39    QuietWriter(Writer writer, ErrorHandler errorHandler) {
    40      super(writer);
    41      setErrorHandler(errorHandler);
    42    }
    43
    44    public
    45    void write(String string) {
    46      if (string != null) {
    47      	try {
    48        		out.write(string);
    49      	} catch(Exception e) {
    50        		errorHandler.error("Failed to write ["+string+"].", e,
    51  			 	ErrorCode.WRITE_FAILURE);
    52  	    }
    53      }
    54    }
    55
    56    public
    57    void flush() {
    58      try {
    59        out.flush();
    60      } catch(Exception e) {
    61        errorHandler.error("Failed to flush writer,", e,
    62  			 ErrorCode.FLUSH_FAILURE);
    63      }
    64    }
    65
    66
    67    public
    68    void setErrorHandler(ErrorHandler eh) {
    69      if(eh == null) {
    70        // This is a programming error on the part of the enclosing appender.
    71        throw new IllegalArgumentException("Attempted to set null ErrorHandler.");
    72      } else {
    73        this.errorHandler = eh;
    74      }
    75    }
    76  }