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 }
77