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

1.1       ylafon      1: // ExtendedCommonLogger.java
1.13    ! ylafon      2: // $Id: ExtendedCommonLogger.java,v 1.12 2001/02/14 17:44:27 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:        String entry  = null ;
                     32:        long   date   = reply.getDate();
                     33:        // Compute the time zone offset, first call only.
                     34:        if ( tz == -1 ) {
                     35:            tz = new Date().getTimezoneOffset();
                     36:        }
1.5       ylafon     37:        Date   now;
                     38:        if (date < 0 ) {
                     39:            now = new Date((new Date()).getTime() + tz*60*1000);
                     40:        } else {
                     41:            now = new Date(date + (tz*60*1000));
                     42:        }
1.12      ylafon     43:         // check if we need to reset the timezone
                     44:        if (hour == -1) {
                     45:            hour = now.getHours();
                     46:        } else {
                     47:            int nhour = now.getHours();
                     48:            if (nhour != hour) {
                     49:                hour = nhour;
                     50:                tz = -1;
                     51:            }
                     52:        }
1.4       ylafon     53:        if (rotateLevel > 0) {
                     54:            checkLogFile(now);
1.1       ylafon     55:        }
1.4       ylafon     56: 
1.1       ylafon     57:        String user = (String) request.getState(AuthFilter.STATE_AUTHUSER);
1.10      ylafon     58:        URL urlst = (URL) request.getState(Request.ORIG_URL_STATE);
                     59:        String requrl;
                     60:        if (urlst == null) {
1.9       ylafon     61:            requrl = request.getURL().toExternalForm();
1.10      ylafon     62:        } else {
                     63:            requrl = urlst.toExternalForm();
1.9       ylafon     64:        }
1.13    ! ylafon     65:        int minutes = now.getMinutes();
        !            66:        int seconds = now.getSeconds();
        !            67:        StringBuffer sb = new StringBuffer(512);
        !            68:        sb.append(client.getInetAddress().getHostAddress());
        !            69:        sb.append(" - ");
        !            70:        if (user == null) {
        !            71:            sb.append("- [");
        !            72:        } else {
        !            73:            sb.append(user);
        !            74:            sb.append(" [");
        !            75:        }
        !            76:        if (now.getDate() < 10) {
        !            77:            sb.append('0');
        !            78:        }
        !            79:        sb.append(now.getDate());
        !            80:        sb.append('/');
        !            81:        sb.append(monthnames[now.getMonth()]);
        !            82:        sb.append('/');
        !            83:        sb.append(now.getYear() + 1900);
        !            84:        sb.append(':');
        !            85:        if (hour < 10) {
        !            86:            sb.append('0');
        !            87:        }
        !            88:        sb.append(hour);
        !            89:        sb.append(':');
        !            90:        if (minutes < 10) {
        !            91:            sb.append('0');
        !            92:        }
        !            93:        sb.append(minutes);
        !            94:        sb.append(':');
        !            95:        if (seconds < 10) {
        !            96:            sb.append('0');
        !            97:        }
        !            98:        sb.append(seconds);
        !            99:        sb.append(" +0000] \"");
        !           100:        sb.append(request.getMethod());
        !           101:        sb.append(' ');
        !           102:        sb.append(requrl);
        !           103:        sb.append(' ');
        !           104:        sb.append(request.getVersion());
        !           105:        sb.append("\" ");
        !           106:        sb.append(reply.getStatus());
        !           107:        sb.append(' ');
        !           108:        if (nbytes < 0) {
        !           109:            sb.append('-');
        !           110:        } else {
        !           111:            sb.append(nbytes);
        !           112:        }
        !           113:        if (request.getReferer() == null) {
        !           114:            if (request.getUserAgent() == null) {
        !           115:                sb.append(" \"-\" \"-\"");
        !           116:            } else {
        !           117:                sb.append(" \"-\" \"");
        !           118:                sb.append(request.getUserAgent());
        !           119:                sb.append('\"');
        !           120:            }
        !           121:        } else {
        !           122:            if (request.getUserAgent() == null) {
        !           123:                sb.append(" \"");
        !           124:                sb.append(request.getReferer());
        !           125:                sb.append("\" \"-\"");
        !           126:            } else {
        !           127:                sb.append(" \"");
        !           128:                sb.append(request.getReferer());
        !           129:                sb.append("\" \"");
        !           130:                sb.append(request.getUserAgent());
        !           131:                sb.append('\"');
        !           132:            }
        !           133:        }
        !           134:        sb.append('\n');
        !           135:        logmsg (new String(sb)) ;
1.1       ylafon    136:     }
1.8       ylafon    137: 
1.1       ylafon    138:     /**
                    139:      * Construct a new Logger instance.
                    140:      */
1.8       ylafon    141: 
1.1       ylafon    142:     ExtendedCommonLogger () {
                    143:        this.msgbuf = new byte[128] ;
                    144:     }   
1.8       ylafon    145: 
1.1       ylafon    146: }

Webmaster