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

1.1       ylafon      1: // ExtendedCommonLogger.java
1.14    ! ylafon      2: // $Id: ExtendedCommonLogger.java,v 1.13 2002/06/07 12:09:00 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.9       ylafon     37:            requrl = request.getURL().toExternalForm();
1.10      ylafon     38:        } else {
                     39:            requrl = urlst.toExternalForm();
1.9       ylafon     40:        }
1.13      ylafon     41:        StringBuffer sb = new StringBuffer(512);
1.14    ! ylafon     42:        String logs;
        !            43:        int status = reply.getStatus();
        !            44:        if ((status > 999) || (status < 0)) {
        !            45:            status = 999; // means unknown
        !            46:        }
        !            47:        synchronized(sb) {
        !            48:            byte ib[] = client.getInetAddress().getAddress();
        !            49:            if (ib.length == 4) {
        !            50:                for (int i=0; i< 4; i++) {
        !            51:                    int b = ib[i];
        !            52:                    if (b < 0) {
        !            53:                        b += 256;
        !            54:                    }
        !            55:                    if (b > 99) {
        !            56:                        sb.append((char)('0' + (b / 100)));
        !            57:                        b = b % 100;
        !            58:                    }
        !            59:                    if (b > 9) {
        !            60:                        sb.append((char)('0' + (b / 10)));
        !            61:                        b = b % 10;
        !            62:                    }
        !            63:                    sb.append((char)('0'+b));
        !            64:                    if (i < 3) {
        !            65:                        sb.append('.');
        !            66:                    }
        !            67:                }
        !            68:            } else { // ipv6, let's be safe :)
        !            69:                sb.append(client.getInetAddress().getHostAddress());
        !            70:            }
        !            71:            sb.append(" - ");
        !            72:            if (user == null) {
        !            73:                sb.append("- [");
        !            74:            } else {
        !            75:                sb.append(user);
        !            76:                sb.append(" [");
        !            77:            }
        !            78:            dateCache(date, sb);
        !            79:            sb.append("] \"");
        !            80:            sb.append(request.getMethod());
        !            81:            sb.append(' ');
        !            82:            sb.append(requrl);
        !            83:            sb.append(' ');
        !            84:            sb.append(request.getVersion());
        !            85:            sb.append("\" ");
        !            86:            sb.append((char)('0'+ status / 100));
        !            87:            status = status % 100;
        !            88:            sb.append((char)('0'+ status / 10));
        !            89:            status = status % 10;
        !            90:            sb.append((char)('0'+ status));
        !            91:            sb.append(' ');
        !            92:            if (nbytes < 0) {
        !            93:                sb.append('-');
1.13      ylafon     94:            } else {
1.14    ! ylafon     95:                sb.append(nbytes);
1.13      ylafon     96:            }
1.14    ! ylafon     97:            if (request.getReferer() == null) {
        !            98:                if (request.getUserAgent() == null) {
        !            99:                    sb.append(" \"-\" \"-\"");
        !           100:                } else {
        !           101:                    sb.append(" \"-\" \"");
        !           102:                    sb.append(request.getUserAgent());
        !           103:                    sb.append('\"');
        !           104:                }
1.13      ylafon    105:            } else {
1.14    ! ylafon    106:                if (request.getUserAgent() == null) {
        !           107:                    sb.append(" \"");
        !           108:                    sb.append(request.getReferer());
        !           109:                    sb.append("\" \"-\"");
        !           110:                } else {
        !           111:                    sb.append(" \"");
        !           112:                    sb.append(request.getReferer());
        !           113:                    sb.append("\" \"");
        !           114:                    sb.append(request.getUserAgent());
        !           115:                    sb.append('\"');
        !           116:                }
1.13      ylafon    117:            }
1.14    ! ylafon    118:            sb.append('\n');
        !           119:            logs = sb.toString();
1.13      ylafon    120:        }
1.14    ! ylafon    121:        logmsg(logs);
1.1       ylafon    122:     }
1.8       ylafon    123: 
1.1       ylafon    124:     /**
                    125:      * Construct a new Logger instance.
                    126:      */
1.8       ylafon    127: 
1.1       ylafon    128:     ExtendedCommonLogger () {
                    129:        this.msgbuf = new byte[128] ;
                    130:     }   
1.8       ylafon    131: 
1.1       ylafon    132: }

Webmaster