Guillermo Grandes (JIRA) schrieb:
     [ http://issues.apache.org/jira/browse/JAMES-601?page=all ]

Guillermo Grandes updated JAMES-601:
------------------------------------

    Attachment: James-final-20060923.diff

Attach final version of the Patch "James-final-20060923.diff", other diffs are 
old... go to Trash ;-)

Add Class detail in logs of James.Mailet (patch)
------------------------------------------------

                Key: JAMES-601
                URL: http://issues.apache.org/jira/browse/JAMES-601
            Project: James
         Issue Type: Improvement
         Components: Mailet API, James Core, Matchers/Mailets (bundled), Remote 
Delivery, Mailet Contributions
   Affects Versions: 2.3.0rc1
        Environment: james 2.3.0rc1
           Reporter: Guillermo Grandes
        Attachments: James-final-20060923.diff, James.java.diff, 
James.java.diff, JamesChildsLogger.java.diff


In order to improve the organization and operation of logs I have thought about 
this piece of code, without change Mailet API and that does not force to make 
great changes in the Mailets.
This code affects :
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/James.java
==============================================
/**
* Return the logger for the Mailet API
*
* @return the logger for the Mailet API
*/
private Logger getMailetLogger() {     // it replaces the original method
    if (mailetLogger == null) {
        mailetLogger = getLogger().getChildLogger("Mailet");
    }
    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() {    // it is a new method
    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;
    }
}
==============================================
The result of this patch is:
Original Logs...
INFO  [James.Mailet] ToRepository: Storing mail Mail1222222222222-0 in 
file://var/mail/inbound/
INFO  [James.Mailet] RemoteDelivery: Attempting delivery of Mail1222222222222-0 
to host 192.168.1.1 at 192.168.1.1 for addresses [EMAIL PROTECTED]
INFO  [James.Mailet] BayesianAnalysisFeeder: maxSize: 200000
Improved Logs...
INFO  [James.Mailet.org.apache.james.transport.mailets.ToRepository] 
ToRepository: Storing mail Mail1222222222222-0 in file://var/mail/inbound/
INFO  [James.Mailet.org.apache.james.transport.mailets.RemoteDelivery] 
RemoteDelivery: Attempting delivery of Mail1222222222222-0 to host 192.168.1.1 
at 192.168.1.1 for addresses [EMAIL PROTECTED]
INFO  [James.Mailet.org.apache.james.transport.mailets.BayesianAnalysisFeeder] 
BayesianAnalysisFeeder: maxSize: 200000
With this you can organize your logs by Mailet / Category in environment.xml :-)


The Patch seems to be ok i just not like the catch (Exception e) stuff. IMHO thats a bad practice.

bye
Norman


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to