X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=srcjar_unused%2Forg%2Fapache%2Flog4j%2Fvaria%2FFallbackErrorHandler.java;fp=srcjar_unused%2Forg%2Fapache%2Flog4j%2Fvaria%2FFallbackErrorHandler.java;h=7cbc87de4c4880e46384e616029ea80a631b9311;hb=ec8f3cedf60fb1feed6d34de6b49f6bfa78b9dd8;hp=0000000000000000000000000000000000000000;hpb=056dad85a910551cc95e44d451a61f6b8c4dd35d;p=jalview.git diff --git a/srcjar_unused/org/apache/log4j/varia/FallbackErrorHandler.java b/srcjar_unused/org/apache/log4j/varia/FallbackErrorHandler.java new file mode 100644 index 0000000..7cbc87d --- /dev/null +++ b/srcjar_unused/org/apache/log4j/varia/FallbackErrorHandler.java @@ -0,0 +1,138 @@ +/* + * 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.log4j.varia; + +import org.apache.log4j.spi.ErrorHandler; +import org.apache.log4j.spi.LoggingEvent; +import org.apache.log4j.Appender; +import org.apache.log4j.Logger; +import org.apache.log4j.helpers.LogLog; +import java.util.Vector; +import java.io.InterruptedIOException; + +/** + * + * The FallbackErrorHandler implements the ErrorHandler + * interface such that a secondary appender may be specified. This + * secondary appender takes over if the primary appender fails for + * whatever reason. + * + *

The error message is printed on System.err, and + * logged in the new secondary appender. + * + * @author Ceki Gücü + * */ +public class FallbackErrorHandler implements ErrorHandler { + + + Appender backup; + Appender primary; + Vector loggers; + + public FallbackErrorHandler() { + } + + + /** + Adds the logger passed as parameter to the list of + loggers that we need to search for in case of appender failure. + */ + public + void setLogger(Logger logger) { + LogLog.debug("FB: Adding logger [" + logger.getName() + "]."); + if(loggers == null) { + loggers = new Vector(); + } + loggers.addElement(logger); + } + + + /** + No options to activate. + */ + public + void activateOptions() { + } + + + /** + Prints the message and the stack trace of the exception on + System.err. */ + public + void error(String message, Exception e, int errorCode) { + error(message, e, errorCode, null); + } + + /** + Prints the message and the stack trace of the exception on + System.err. + */ + public + void error(String message, Exception e, int errorCode, LoggingEvent event) { + if (e instanceof InterruptedIOException) { + Thread.currentThread().interrupt(); + } + LogLog.debug("FB: The following error reported: " + message, e); + LogLog.debug("FB: INITIATING FALLBACK PROCEDURE."); + if (loggers != null) { + for(int i = 0; i < loggers.size(); i++) { + Logger l = (Logger) loggers.elementAt(i); + LogLog.debug("FB: Searching for ["+primary.getName()+"] in logger [" + +l.getName() + "]."); + LogLog.debug("FB: Replacing ["+primary.getName()+"] by [" + + backup.getName() + "] in logger ["+ l.getName() +"]."); + l.removeAppender(primary); + LogLog.debug("FB: Adding appender ["+backup.getName()+"] to logger " + + l.getName()); + l.addAppender(backup); + } + } + } + + + /** + Print a the error message passed as parameter on + System.err. + */ + public + void error(String message) { + //if(firstTime) { + //LogLog.error(message); + //firstTime = false; + //} + } + + /** + The appender to which this error handler is attached. + */ + public + void setAppender(Appender primary) { + LogLog.debug("FB: Setting primary appender to [" + primary.getName() + "]."); + this.primary = primary; + } + + /** + Set the backup appender. + */ + public + void setBackupAppender(Appender backup) { + LogLog.debug("FB: Setting backup appender to [" + backup.getName() + "]."); + this.backup = backup; + } + +}