in src/main/java/org/apache/log4j/spi/LoggingEvent.java [418:458]
void readLevel(ObjectInputStream ois)
throws java.io.IOException, ClassNotFoundException {
int p = ois.readInt();
try {
String className = (String) ois.readObject();
if(className == null) {
level = Level.toLevel(p);
} else {
Method m = (Method) methodCache.get(className);
if(m == null) {
Class clazz = Loader.loadClass(className);
// Note that we use Class.getDeclaredMethod instead of
// Class.getMethod. This assumes that the Level subclass
// implements the toLevel(int) method which is a
// requirement. Actually, it does not make sense for Level
// subclasses NOT to implement this method. Also note that
// only Level can be subclassed and not Priority.
m = clazz.getDeclaredMethod(TO_LEVEL, TO_LEVEL_PARAMS);
methodCache.put(className, m);
}
level = (Level) m.invoke(null, new Integer[] { new Integer(p) } );
}
} catch(InvocationTargetException 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);
level = Level.toLevel(p);
} catch(IllegalAccessException e) {
LogLog.warn("Level deserialization failed, reverting to default.", e);
level = Level.toLevel(p);
} catch(RuntimeException e) {
LogLog.warn("Level deserialization failed, reverting to default.", e);
level = Level.toLevel(p);
}
}