You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ca...@apache.org on 2008/08/15 07:53:56 UTC

svn commit: r686149 - in /logging/log4j/trunk/src/main/java/org/apache/log4j: config/ helpers/ jmx/ net/ spi/ xml/

Author: carnold
Date: Thu Aug 14 22:53:55 2008
New Revision: 686149

URL: http://svn.apache.org/viewvc?rev=686149&view=rev
Log:
Bug 44157: InterruptedIOException ignored by log4j

Modified:
    logging/log4j/trunk/src/main/java/org/apache/log4j/config/PropertyGetter.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/config/PropertySetter.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/helpers/Loader.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/helpers/OptionConverter.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/Agent.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AppenderDynamicMBean.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/LayoutDynamicMBean.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketHubAppender.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketNode.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/net/TelnetAppender.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LocationInfo.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LoggingEvent.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/xml/DOMConfigurator.java

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/config/PropertyGetter.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/config/PropertyGetter.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/config/PropertyGetter.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/config/PropertyGetter.java Thu Aug 14 22:53:55 2008
@@ -17,11 +17,17 @@
 
 package org.apache.log4j.config;
 
-import java.beans.*;
-import java.lang.reflect.*;
 import org.apache.log4j.Priority;
 import org.apache.log4j.helpers.LogLog;
 
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.io.InterruptedIOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
 
 /**
    Used for inferring configuration information for a log4j's component.
@@ -77,8 +83,16 @@
 	if (result != null) {
 	  callback.foundProperty(obj, prefix, name, result);
 	}
-      } catch (Exception ex) {
-	LogLog.warn("Failed to get value of property " + name);
+      } catch (IllegalAccessException ex) {
+	    LogLog.warn("Failed to get value of property " + name);
+      } catch (InvocationTargetException ex) {
+        if (ex.getTargetException() instanceof InterruptedException
+                || ex.getTargetException() instanceof InterruptedIOException) {
+            Thread.currentThread().interrupt();
+        }
+        LogLog.warn("Failed to get value of property " + name);
+      } catch (RuntimeException ex) {
+	    LogLog.warn("Failed to get value of property " + name);
       }
     }
   }

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/config/PropertySetter.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/config/PropertySetter.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/config/PropertySetter.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/config/PropertySetter.java Thu Aug 14 22:53:55 2008
@@ -19,17 +19,23 @@
 
 package org.apache.log4j.config;
 
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.lang.reflect.*;
-import java.util.*;
-import org.apache.log4j.*;
+import org.apache.log4j.Appender;
+import org.apache.log4j.Level;
+import org.apache.log4j.Priority;
 import org.apache.log4j.helpers.LogLog;
 import org.apache.log4j.helpers.OptionConverter;
 import org.apache.log4j.spi.OptionHandler;
 
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.io.InterruptedIOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Enumeration;
+import java.util.Properties;
+
 /**
    General purpose Object property setter. Clients repeatedly invokes
    {@link #setProperty setProperty(name,value)} in order to invoke setters
@@ -142,7 +148,17 @@
             setter.setProperties(properties, prefix + key + ".");
             try {
                 prop.getWriteMethod().invoke(this.obj, new Object[] { opt });
-            } catch(Exception ex) {
+            } catch(IllegalAccessException ex) {
+                LogLog.warn("Failed to set property [" + key +
+                            "] to value \"" + value + "\". ", ex);
+            } catch(InvocationTargetException ex) {
+                if (ex.getTargetException() instanceof InterruptedException
+                        || ex.getTargetException() instanceof InterruptedIOException) {
+                    Thread.currentThread().interrupt();
+                }
+                LogLog.warn("Failed to set property [" + key +
+                            "] to value \"" + value + "\". ", ex);
+            } catch(RuntimeException ex) {
                 LogLog.warn("Failed to set property [" + key +
                             "] to value \"" + value + "\". ", ex);
             }
@@ -226,7 +242,15 @@
     LogLog.debug("Setting property [" + name + "] to [" +arg+"].");
     try {
       setter.invoke(obj, new Object[]  { arg });
-    } catch (Exception ex) {
+    } catch (IllegalAccessException ex) {
+      throw new PropertySetterException(ex);
+    } catch (InvocationTargetException ex) {
+        if (ex.getTargetException() instanceof InterruptedException
+                || ex.getTargetException() instanceof InterruptedIOException) {
+            Thread.currentThread().interrupt();
+        }        
+        throw new PropertySetterException(ex);
+    } catch (RuntimeException ex) {
       throw new PropertySetterException(ex);
     }
   }

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/helpers/Loader.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/helpers/Loader.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/helpers/Loader.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/helpers/Loader.java Thu Aug 14 22:53:55 2008
@@ -21,6 +21,7 @@
 import java.lang.IllegalAccessException;
 import java.lang.reflect.Method;
 import java.lang.reflect.InvocationTargetException;
+import java.io.InterruptedIOException;
 
 
 /**
@@ -112,8 +113,19 @@
   	    return url;
   	  }
   	}
+    } catch(IllegalAccessException t) {
+        LogLog.warn(TSTR, t);
+    } catch(InvocationTargetException t) {
+        if (t.getTargetException() instanceof InterruptedException
+                || t.getTargetException() instanceof InterruptedIOException) {
+            Thread.currentThread().interrupt();
+        }
+        LogLog.warn(TSTR, t);
     } catch(Throwable t) {
-  	LogLog.warn(TSTR, t);
+      //
+      //  can't be InterruptedException or InterruptedIOException
+      //    since not declared, must be error or RuntimeError.
+      LogLog.warn(TSTR, t);
     }
     
     // Last ditch attempt: get the resource from the class path. It
@@ -171,13 +183,19 @@
       return Class.forName(clazz);
     } else {
       try {
-	return getTCL().loadClass(clazz);
-      } catch(Throwable e) {
-	// we reached here because tcl was null or because of a
-	// security exception, or because clazz could not be loaded...
-	// In any case we now try one more time
-	return Class.forName(clazz);
+	    return getTCL().loadClass(clazz);
+      }
+      // we reached here because tcl was null or because of a
+      // security exception, or because clazz could not be loaded...
+      // In any case we now try one more time
+      catch(InvocationTargetException e) {
+          if (e.getTargetException() instanceof InterruptedException
+                  || e.getTargetException() instanceof InterruptedIOException) {
+              Thread.currentThread().interrupt();
+          }
+      } catch(Throwable t) {
       }
     }
-  } 
+    return Class.forName(clazz);
+  }
 }

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/helpers/OptionConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/helpers/OptionConverter.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/helpers/OptionConverter.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/helpers/OptionConverter.java Thu Aug 14 22:53:55 2008
@@ -19,6 +19,9 @@
 
 import java.util.Properties;
 import java.net.URL;
+import java.io.InterruptedIOException;
+import java.lang.reflect.InvocationTargetException;
+
 import org.apache.log4j.Level;
 import org.apache.log4j.spi.Configurator;
 import org.apache.log4j.spi.LoggerRepository;
@@ -231,6 +234,10 @@
       LogLog.warn("custom level class [" + clazz + "]"
         + " does not have a class function toLevel(String, Level)", e);
     } catch(java.lang.reflect.InvocationTargetException e) {
+        if (e.getTargetException() instanceof InterruptedException
+                || e.getTargetException() instanceof InterruptedIOException) {
+            Thread.currentThread().interrupt();
+        }
       LogLog.warn("custom level class [" + clazz + "]"
 		   + " could not be instantiated", e);
     } catch(ClassCastException e) {
@@ -239,7 +246,7 @@
     } catch(IllegalAccessException e) {
       LogLog.warn("class ["+clazz+
 		   "] cannot be instantiated due to access restrictions", e);
-    } catch(Exception e) {
+    } catch(RuntimeException e) {
       LogLog.warn("class ["+clazz+"], level ["+levelName+
 		   "] conversion failed.", e);
     }
@@ -328,8 +335,14 @@
 	  return defaultValue;
 	}
 	return classObj.newInstance();
-      } catch (Exception e) {
-	LogLog.error("Could not instantiate class [" + className + "].", e);
+      } catch (ClassNotFoundException e) {
+	    LogLog.error("Could not instantiate class [" + className + "].", e);
+      } catch (IllegalAccessException e) {
+	    LogLog.error("Could not instantiate class [" + className + "].", e);
+      } catch (InstantiationException e) {
+        LogLog.error("Could not instantiate class [" + className + "].", e);
+      } catch (RuntimeException e) {
+	    LogLog.error("Could not instantiate class [" + className + "].", e);
       }
     }
     return defaultValue;

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/Agent.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/Agent.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/Agent.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/Agent.java Thu Aug 14 22:53:55 2008
@@ -24,6 +24,7 @@
 import javax.management.MBeanServerFactory;
 import javax.management.ObjectName;
 import java.lang.reflect.InvocationTargetException;
+import java.io.InterruptedIOException;
 
 
 /**
@@ -87,6 +88,10 @@
           if (cause instanceof RuntimeException) {
               throw (RuntimeException) cause;
           } else if (cause != null) {
+              if (cause instanceof InterruptedException
+                      || cause instanceof InterruptedIOException) {
+                  Thread.currentThread().interrupt();
+              }
               throw new RuntimeException(cause.toString());
           } else {
               throw new RuntimeException();

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AppenderDynamicMBean.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AppenderDynamicMBean.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AppenderDynamicMBean.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AppenderDynamicMBean.java Thu Aug 14 22:53:55 2008
@@ -50,6 +50,7 @@
 import java.lang.reflect.Method;
 import java.util.Hashtable;
 import java.util.Vector;
+import java.io.InterruptedIOException;
 
 public class AppenderDynamicMBean extends AbstractDynamicMBean {
 
@@ -252,6 +253,10 @@
       } catch(IllegalAccessException e) {
 	    return null;
       } catch(InvocationTargetException e) {
+          if (e.getTargetException() instanceof InterruptedException
+                  || e.getTargetException() instanceof InterruptedIOException) {
+              Thread.currentThread().interrupt();
+          }
 	    return null;
       } catch(RuntimeException e) {
 	    return null;
@@ -308,7 +313,11 @@
 	mu.writeMethod.invoke(appender,  o);
 
       } catch(InvocationTargetException e) {
-	    cat.error("FIXME", e);
+        if (e.getTargetException() instanceof InterruptedException
+                || e.getTargetException() instanceof InterruptedIOException) {
+            Thread.currentThread().interrupt();
+        }
+        cat.error("FIXME", e);
       } catch(IllegalAccessException e) {
 	    cat.error("FIXME", e);
       } catch(RuntimeException e) {

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/LayoutDynamicMBean.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/LayoutDynamicMBean.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/LayoutDynamicMBean.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/LayoutDynamicMBean.java Thu Aug 14 22:53:55 2008
@@ -46,6 +46,7 @@
 import java.beans.BeanInfo;
 import java.beans.PropertyDescriptor;
 import java.beans.IntrospectionException;
+import java.io.InterruptedIOException;
 
 public class LayoutDynamicMBean extends AbstractDynamicMBean {
 
@@ -190,6 +191,10 @@
       try {
 	return mu.readMethod.invoke(layout, null);
       } catch(InvocationTargetException e) {
+          if (e.getTargetException() instanceof InterruptedException
+                  || e.getTargetException() instanceof InterruptedIOException) {
+              Thread.currentThread().interrupt();
+          }
 	    return null;
       } catch(IllegalAccessException e) {
 	    return null;
@@ -248,6 +253,10 @@
 	mu.writeMethod.invoke(layout,  o);
 
       } catch(InvocationTargetException e) {
+          if (e.getTargetException() instanceof InterruptedException
+                  || e.getTargetException() instanceof InterruptedIOException) {
+              Thread.currentThread().interrupt();
+          }
 	    cat.error("FIXME", e);
       } catch(IllegalAccessException e) {
 	    cat.error("FIXME", e);

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketHubAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketHubAppender.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketHubAppender.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketHubAppender.java Thu Aug 14 22:53:55 2008
@@ -372,6 +372,7 @@
           monitorThread.join();
         }
         catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
           // do nothing?
         }
         

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketNode.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketNode.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketNode.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/net/SocketNode.java Thu Aug 14 22:53:55 2008
@@ -55,8 +55,12 @@
     try {
       ois = new ObjectInputStream(
                          new BufferedInputStream(socket.getInputStream()));
-    }
-    catch(Exception e) {
+    } catch(InterruptedIOException e) {
+      Thread.currentThread().interrupt();
+      logger.error("Could not open ObjectInputStream to "+socket, e);
+    } catch(IOException e) {
+      logger.error("Could not open ObjectInputStream to "+socket, e);
+    } catch(RuntimeException e) {
       logger.error("Could not open ObjectInputStream to "+socket, e);
     }
   }

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/net/TelnetAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/net/TelnetAppender.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/net/TelnetAppender.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/net/TelnetAppender.java Thu Aug 14 22:53:55 2008
@@ -106,6 +106,7 @@
         try {
             sh.join();
         } catch(InterruptedException ex) {
+            Thread.currentThread().interrupt();
         }
     }
   }

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LocationInfo.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LocationInfo.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LocationInfo.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LocationInfo.java Thu Aug 14 22:53:55 2008
@@ -24,7 +24,9 @@
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.io.InterruptedIOException;
 import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
 
 /**
    The internal representation of caller location information.
@@ -99,7 +101,9 @@
           getMethodNameMethod = stackTraceElementClass.getMethod("getMethodName", noArgs);
           getFileNameMethod = stackTraceElementClass.getMethod("getFileName", noArgs);
           getLineNumberMethod = stackTraceElementClass.getMethod("getLineNumber", noArgs);
-      } catch(Exception ex) {
+      } catch(ClassNotFoundException ex) {
+          LogLog.debug("LocationInfo will use pre-JDK 1.4 methods to determine location.");
+      } catch(NoSuchMethodException ex) {
           LogLog.debug("LocationInfo will use pre-JDK 1.4 methods to determine location.");
       }
   }
@@ -167,7 +171,15 @@
                   prevClass = thisClass;
               }
               return;
-          } catch(Exception ex) {
+          } catch(IllegalAccessException ex) {
+              LogLog.debug("LocationInfo failed using JDK 1.4 methods", ex);
+          } catch(InvocationTargetException ex) {
+              if (ex.getTargetException() instanceof InterruptedException
+                      || ex.getTargetException() instanceof InterruptedIOException) {
+                  Thread.currentThread().interrupt();
+              }
+              LogLog.debug("LocationInfo failed using JDK 1.4 methods", ex);
+          } catch(RuntimeException ex) {
               LogLog.debug("LocationInfo failed using JDK 1.4 methods", ex);
           }
       }

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LoggingEvent.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LoggingEvent.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LoggingEvent.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LoggingEvent.java Thu Aug 14 22:53:55 2008
@@ -27,6 +27,7 @@
 
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.io.InterruptedIOException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Collections;
@@ -439,7 +440,11 @@
 	level = (Level) m.invoke(null,  PARAM_ARRAY);
       }
     } catch(InvocationTargetException e) {
-	LogLog.warn("Level deserialization failed, reverting to default.", e);
+        if (e.getTargetException() instanceof InterruptedException
+                || e.getTargetException() instanceof InterruptedIOException) {
+            Thread.currentThread().interrupt();
+        }
+    LogLog.warn("Level deserialization failed, reverting to default.", e);
 	level = Level.toLevel(p);
     } catch(NoSuchMethodException e) {
 	LogLog.warn("Level deserialization failed, reverting to default.", e);

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/xml/DOMConfigurator.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/xml/DOMConfigurator.java?rev=686149&r1=686148&r2=686149&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/xml/DOMConfigurator.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/xml/DOMConfigurator.java Thu Aug 14 22:53:55 2008
@@ -52,6 +52,7 @@
 import java.io.InterruptedIOException;
 import java.io.Reader;
 import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
 import java.util.Hashtable;
 import java.util.Properties;
@@ -403,10 +404,18 @@
 	 Method getInstanceMethod = clazz.getMethod("getLogger", 
 						    ONE_STRING_PARAM);
 	 cat = (Logger) getInstanceMethod.invoke(null, new Object[] {catName});
+       } catch (InvocationTargetException oops) {
+          if (oops.getTargetException() instanceof InterruptedException
+                  || oops.getTargetException() instanceof InterruptedIOException) {
+              Thread.currentThread().interrupt();
+          }
+          LogLog.error("Could not retrieve category ["+catName+
+		      "]. Reported error follows.", oops);
+	      return;
        } catch (Exception oops) {
-	 LogLog.error("Could not retrieve category ["+catName+
+	      LogLog.error("Could not retrieve category ["+catName+
 		      "]. Reported error follows.", oops);
-	 return;
+	      return;
        }
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org