--- orig/James.java 2006-09-15 00:02:41.000000000 +0200 +++ patch/James.java 2006-09-15 00:05:15.000000000 +0200 @@ -787,7 +787,46 @@ if (mailetLogger == null) { mailetLogger = getLogger().getChildLogger("Mailet"); } - return mailetLogger; + String p = findParentCaller(); + return ((p == null) ? mailetLogger : mailetLogger.getChildLogger(p)); + } + + /** + * Return the Caller Mailet + * + * @return the ClassName for the Caller Mailet / Matcher + */ + private String findParentCaller() { + try { + throw new Exception(); + } + catch (Throwable t) { + StackTraceElement[] ste = t.getStackTrace(); + 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; // speed-up + if ((cn.equals("org.apache.mailet.GenericMailet")) || + (cn.equals("org.apache.mailet.GenericMatcher"))) { + continue; + } + try { + Class c = Class.forName(cn); + if ((org.apache.mailet.GenericMailet.class.isAssignableFrom(c)) || + (org.apache.mailet.GenericMatcher.class.isAssignableFrom(c))) { + found = true; break; + } + } + catch(Exception ign) {} + } + if (!found) return null; + try { + return ste[i].getClassName().replace("$", "."); + } + catch (Exception ign) {} + return null; + } } /**