--- /james/server/trunk/src/java/org/apache/james/James.java 2006-09-23 20:33:01.000000000 +0200 +++ /james/server/trunk/src/java/org/apache/james/James.java 2006-09-23 20:35:29.000000000 +0200 @@ -806,7 +806,49 @@ if (mailetLogger == null) { mailetLogger = getLogger().getChildLogger("Mailet"); } - return mailetLogger; + String p = findParentCaller(); + return ((p == null) ? mailetLogger : mailetLogger.getChildLogger(p)); + } + + /** + * Return the Caller Mailet + * + * @return String for the ClassName for the Caller Mailet / Matcher + */ + private String findParentCaller() { + //long now = System.currentTimeMillis(); + StackTraceElement[] ste = Thread.currentThread().getStackTrace(); + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + int i; + boolean found = false; + for (i = 0; i < ste.length; i++) { + String cn = ste[i].getClassName(); + if (cn.startsWith("sun") || cn.startsWith("java") || cn.startsWith("$")) continue; + if ((cn.equals("org.apache.mailet.GenericMailet")) || + (cn.equals("org.apache.mailet.GenericMatcher"))) { + continue; + } + try { + Class c = classLoader.loadClass(cn); + if ((org.apache.mailet.GenericMailet.class.isAssignableFrom(c)) || + (org.apache.mailet.GenericMatcher.class.isAssignableFrom(c))) { + found = true; + break; + } + } + catch(ClassNotFoundException ign) { + } + catch(Exception e) { + e.printStackTrace(); + } + } + if (!found) return null; + try { + return ste[i].getClassName().replace("$", "."); + } + catch (Exception e) { + return null; + } } /**