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

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

Webmaster