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ülcü
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  }