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

1.1       ylafon      1: // ExtendedCommonLogger.java
1.16    ! ylafon      2: // $Id: ExtendedCommonLogger.java,v 1.15 2002/07/09 17:44:02 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) {
1.16    ! ylafon     55:                boolean doit;
1.14      ylafon     56:                for (int i=0; i< 4; i++) {
1.16    ! ylafon     57:                    doit = false;
1.14      ylafon     58:                    int b = ib[i];
                     59:                    if (b < 0) {
                     60:                        b += 256;
                     61:                    }
                     62:                    if (b > 99) {
                     63:                        sb.append((char)('0' + (b / 100)));
                     64:                        b = b % 100;
1.16    ! ylafon     65:                        doit = true;
1.14      ylafon     66:                    }
1.16    ! ylafon     67:                    if (doit || (b > 9)) {
1.14      ylafon     68:                        sb.append((char)('0' + (b / 10)));
                     69:                        b = b % 10;
                     70:                    }
                     71:                    sb.append((char)('0'+b));
                     72:                    if (i < 3) {
                     73:                        sb.append('.');
                     74:                    }
                     75:                }
                     76:            } else { // ipv6, let's be safe :)
                     77:                sb.append(client.getInetAddress().getHostAddress());
                     78:            }
                     79:            sb.append(" - ");
                     80:            if (user == null) {
                     81:                sb.append("- [");
                     82:            } else {
                     83:                sb.append(user);
                     84:                sb.append(" [");
                     85:            }
                     86:            dateCache(date, sb);
                     87:            sb.append("] \"");
                     88:            sb.append(request.getMethod());
                     89:            sb.append(' ');
                     90:            sb.append(requrl);
                     91:            sb.append(' ');
                     92:            sb.append(request.getVersion());
                     93:            sb.append("\" ");
                     94:            sb.append((char)('0'+ status / 100));
                     95:            status = status % 100;
                     96:            sb.append((char)('0'+ status / 10));
                     97:            status = status % 10;
                     98:            sb.append((char)('0'+ status));
                     99:            sb.append(' ');
                    100:            if (nbytes < 0) {
                    101:                sb.append('-');
1.13      ylafon    102:            } else {
1.14      ylafon    103:                sb.append(nbytes);
1.13      ylafon    104:            }
1.14      ylafon    105:            if (request.getReferer() == null) {
                    106:                if (request.getUserAgent() == null) {
                    107:                    sb.append(" \"-\" \"-\"");
                    108:                } else {
                    109:                    sb.append(" \"-\" \"");
                    110:                    sb.append(request.getUserAgent());
                    111:                    sb.append('\"');
                    112:                }
1.13      ylafon    113:            } else {
1.14      ylafon    114:                if (request.getUserAgent() == null) {
                    115:                    sb.append(" \"");
                    116:                    sb.append(request.getReferer());
                    117:                    sb.append("\" \"-\"");
                    118:                } else {
                    119:                    sb.append(" \"");
                    120:                    sb.append(request.getReferer());
                    121:                    sb.append("\" \"");
                    122:                    sb.append(request.getUserAgent());
                    123:                    sb.append('\"');
                    124:                }
1.13      ylafon    125:            }
1.14      ylafon    126:            sb.append('\n');
                    127:            logs = sb.toString();
1.13      ylafon    128:        }
1.14      ylafon    129:        logmsg(logs);
1.1       ylafon    130:     }
1.8       ylafon    131: 
1.1       ylafon    132:     /**
                    133:      * Construct a new Logger instance.
                    134:      */
1.8       ylafon    135: 
1.1       ylafon    136:     ExtendedCommonLogger () {
                    137:        this.msgbuf = new byte[128] ;
                    138:     }   
1.8       ylafon    139: 
1.1       ylafon    140: }

Webmaster