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