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

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

Webmaster