Annotation of java/classes/org/w3c/jigsaw/http/ExtendedCommonLogger.java, revision 1.15

1.1       ylafon      1: // ExtendedCommonLogger.java
1.15    ! ylafon      2: // $Id: ExtendedCommonLogger.java,v 1.14 2002/06/20 11:27:53 ylafon Exp $
1.1       ylafon      3: // (c) COPYRIGHT MIT and INRIA, 1999.
                      4: // Please first read the full copyright statement in file COPYRIGHT.html
                      5: 
                      6: package org.w3c.jigsaw.http ;
1.11      ylafon      7: 
                      8: import java.net.URL;
1.1       ylafon      9: 
                     10: import java.util.Date ;
                     11: 
                     12: import org.w3c.jigsaw.auth.AuthFilter;
                     13: 
                     14: /**
                     15:  * The ExtendedCommonLogger class implements the abstract Logger class.
                     16:  * It just rotates the log every month and use the extended log format
                     17:  * @see org.w3c.jigsaw.http.CommonLogger
                     18:  */
                     19: 
                     20: public class ExtendedCommonLogger extends CommonLogger {
                     21: 
                     22:     private   byte                 msgbuf[] = null ;
                     23: 
                     24:     /**
                     25:      * Log the given HTTP transaction.
                     26:      * This is shamelessly slow.
                     27:      */
                     28: 
                     29:     public void log (Request request, Reply reply, int nbytes, long duration) {
                     30:        Client client = request.getClient() ;
                     31:        long   date   = reply.getDate();
1.4       ylafon     32: 
1.1       ylafon     33:        String user = (String) request.getState(AuthFilter.STATE_AUTHUSER);
1.10      ylafon     34:        URL urlst = (URL) request.getState(Request.ORIG_URL_STATE);
                     35:        String requrl;
                     36:        if (urlst == null) {
1.15    ! ylafon     37:            URL u = request.getURL();
        !            38:            if (u == null) {
        !            39:                requrl = noUrl;
        !            40:            } else {
        !            41:                requrl = u.toExternalForm();
        !            42:            }
1.10      ylafon     43:        } else {
                     44:            requrl = urlst.toExternalForm();
1.9       ylafon     45:        }
1.13      ylafon     46:        StringBuffer sb = new StringBuffer(512);
1.14      ylafon     47:        String logs;
                     48:        int status = reply.getStatus();
                     49:        if ((status > 999) || (status < 0)) {
                     50:            status = 999; // means unknown
                     51:        }
                     52:        synchronized(sb) {
                     53:            byte ib[] = client.getInetAddress().getAddress();
                     54:            if (ib.length == 4) {
                     55:                for (int i=0; i< 4; i++) {
                     56:                    int b = ib[i];
                     57:                    if (b < 0) {
                     58:                        b += 256;
                     59:                    }
                     60:                    if (b > 99) {
                     61:                        sb.append((char)('0' + (b / 100)));
                     62:                        b = b % 100;
                     63:                    }
                     64:                    if (b > 9) {
                     65:                        sb.append((char)('0' + (b / 10)));
                     66:                        b = b % 10;
                     67:                    }
                     68:                    sb.append((char)('0'+b));
                     69:                    if (i < 3) {
                     70:                        sb.append('.');
                     71:                    }
                     72:                }
                     73:            } else { // ipv6, let's be safe :)
                     74:                sb.append(client.getInetAddress().getHostAddress());
                     75:            }
                     76:            sb.append(" - ");
                     77:            if (user == null) {
                     78:                sb.append("- [");
                     79:            } else {
                     80:                sb.append(user);
                     81:                sb.append(" [");
                     82:            }
                     83:            dateCache(date, sb);
                     84:            sb.append("] \"");
                     85:            sb.append(request.getMethod());
                     86:            sb.append(' ');
                     87:            sb.append(requrl);
                     88:            sb.append(' ');
                     89:            sb.append(request.getVersion());
                     90:            sb.append("\" ");
                     91:            sb.append((char)('0'+ status / 100));
                     92:            status = status % 100;
                     93:            sb.append((char)('0'+ status / 10));
                     94:            status = status % 10;
                     95:            sb.append((char)('0'+ status));
                     96:            sb.append(' ');
                     97:            if (nbytes < 0) {
                     98:                sb.append('-');
1.13      ylafon     99:            } else {
1.14      ylafon    100:                sb.append(nbytes);
1.13      ylafon    101:            }
1.14      ylafon    102:            if (request.getReferer() == null) {
                    103:                if (request.getUserAgent() == null) {
                    104:                    sb.append(" \"-\" \"-\"");
                    105:                } else {
                    106:                    sb.append(" \"-\" \"");
                    107:                    sb.append(request.getUserAgent());
                    108:                    sb.append('\"');
                    109:                }
1.13      ylafon    110:            } else {
1.14      ylafon    111:                if (request.getUserAgent() == null) {
                    112:                    sb.append(" \"");
                    113:                    sb.append(request.getReferer());
                    114:                    sb.append("\" \"-\"");
                    115:                } else {
                    116:                    sb.append(" \"");
                    117:                    sb.append(request.getReferer());
                    118:                    sb.append("\" \"");
                    119:                    sb.append(request.getUserAgent());
                    120:                    sb.append('\"');
                    121:                }
1.13      ylafon    122:            }
1.14      ylafon    123:            sb.append('\n');
                    124:            logs = sb.toString();
1.13      ylafon    125:        }
1.14      ylafon    126:        logmsg(logs);
1.1       ylafon    127:     }
1.8       ylafon    128: 
1.1       ylafon    129:     /**
                    130:      * Construct a new Logger instance.
                    131:      */
1.8       ylafon    132: 
1.1       ylafon    133:     ExtendedCommonLogger () {
                    134:        this.msgbuf = new byte[128] ;
                    135:     }   
1.8       ylafon    136: 
1.1       ylafon    137: }

Webmaster