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

1.1       ylafon      1: // ExtendedCommonLogger.java
1.20    ! ylafon      2: // $Id: ExtendedCommonLogger.java,v 1.19 2012/06/16 15:48:45 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:         }
1.20    ! ylafon     52:         boolean ip_done = false;
1.18      ylafon     53: 
1.20    ! ylafon     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).trim());
        !            63:                 }
        !            64:                 sb.append(' ');
        !            65:                 ip_done = true;
        !            66:             }
        !            67:         }
        !            68:         byte ib[] = client.getInetAddress().getAddress();
        !            69:         if (ib.length == 4) {
        !            70:             boolean doit;
        !            71:             for (int i = 0; i < 4; i++) {
        !            72:                 doit = false;
        !            73:                 int b = ib[i];
        !            74:                 if (b < 0) {
        !            75:                     b += 256;
        !            76:                 }
        !            77:                 if (b > 99) {
        !            78:                     sb.append((char) ('0' + (b / 100)));
        !            79:                     b = b % 100;
        !            80:                     doit = true;
        !            81:                 }
        !            82:                 if (doit || (b > 9)) {
        !            83:                     sb.append((char) ('0' + (b / 10)));
        !            84:                     b = b % 10;
        !            85:                 }
        !            86:                 sb.append((char) ('0' + b));
        !            87:                 if (i < 3) {
        !            88:                     sb.append('.');
        !            89:                 }
        !            90:             }
        !            91:         } else { // ipv6, let's be safe :)
        !            92:             sb.append(client.getInetAddress().getHostAddress());
        !            93:         }
        !            94:         sb.append((ip_done) ? " " : " - ");
1.18      ylafon     95:         if (user == null) {
                     96:             sb.append("- [");
                     97:         } else {
                     98:             sb.append(user);
                     99:             sb.append(" [");
                    100:         }
                    101:         dateCache(date, sb);
                    102:         sb.append("] \"");
                    103:         sb.append(request.getMethod());
                    104:         sb.append(' ');
                    105:         sb.append(requrl);
                    106:         sb.append(' ');
                    107:         sb.append(request.getVersion());
                    108:         sb.append("\" ");
                    109:         sb.append((char) ('0' + status / 100));
                    110:         status = status % 100;
                    111:         sb.append((char) ('0' + status / 10));
                    112:         status = status % 10;
                    113:         sb.append((char) ('0' + status));
                    114:         sb.append(' ');
                    115:         if (nbytes < 0) {
                    116:             sb.append('-');
                    117:         } else {
                    118:             sb.append(nbytes);
                    119:         }
                    120:         if (request.getReferer() == null) {
                    121:             if (request.getUserAgent() == null) {
                    122:                 sb.append(" \"-\" \"-\"");
                    123:             } else {
                    124:                 sb.append(" \"-\" \"");
                    125:                 sb.append(request.getUserAgent());
                    126:                 sb.append('\"');
                    127:             }
                    128:         } else {
                    129:             if (request.getUserAgent() == null) {
                    130:                 sb.append(" \"");
                    131:                 sb.append(request.getReferer());
                    132:                 sb.append("\" \"-\"");
                    133:             } else {
                    134:                 sb.append(" \"");
                    135:                 sb.append(request.getReferer());
                    136:                 sb.append("\" \"");
                    137:                 sb.append(request.getUserAgent());
                    138:                 sb.append('\"');
                    139:             }
                    140:         }
                    141:         sb.append('\n');
                    142:         logs = sb.toString();
                    143: 
                    144:         logmsg(logs);
1.1       ylafon    145:     }
1.8       ylafon    146: 
1.1       ylafon    147:     /**
                    148:      * Construct a new Logger instance.
                    149:      */
1.8       ylafon    150: 
1.18      ylafon    151:     ExtendedCommonLogger() {
                    152:         this.msgbuf = new byte[128];
                    153:     }
1.8       ylafon    154: 
1.1       ylafon    155: }

Webmaster