Annotation of java/classes/org/w3c/jigsaw/http/ExtendedCommonLogger.java, revision 1.14
1.1 ylafon 1: // ExtendedCommonLogger.java
1.14 ! ylafon 2: // $Id: ExtendedCommonLogger.java,v 1.13 2002/06/07 12:09:00 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: long date = reply.getDate();
1.4 ylafon 32:
1.1 ylafon 33: String user = (String) request.getState(AuthFilter.STATE_AUTHUSER);
1.10 ylafon 34: URL urlst = (URL) request.getState(Request.ORIG_URL_STATE);
35: String requrl;
36: if (urlst == null) {
1.9 ylafon 37: requrl = request.getURL().toExternalForm();
1.10 ylafon 38: } else {
39: requrl = urlst.toExternalForm();
1.9 ylafon 40: }
1.13 ylafon 41: StringBuffer sb = new StringBuffer(512);
1.14 ! ylafon 42: String logs;
! 43: int status = reply.getStatus();
! 44: if ((status > 999) || (status < 0)) {
! 45: status = 999; // means unknown
! 46: }
! 47: synchronized(sb) {
! 48: byte ib[] = client.getInetAddress().getAddress();
! 49: if (ib.length == 4) {
! 50: for (int i=0; i< 4; i++) {
! 51: int b = ib[i];
! 52: if (b < 0) {
! 53: b += 256;
! 54: }
! 55: if (b > 99) {
! 56: sb.append((char)('0' + (b / 100)));
! 57: b = b % 100;
! 58: }
! 59: if (b > 9) {
! 60: sb.append((char)('0' + (b / 10)));
! 61: b = b % 10;
! 62: }
! 63: sb.append((char)('0'+b));
! 64: if (i < 3) {
! 65: sb.append('.');
! 66: }
! 67: }
! 68: } else { // ipv6, let's be safe :)
! 69: sb.append(client.getInetAddress().getHostAddress());
! 70: }
! 71: sb.append(" - ");
! 72: if (user == null) {
! 73: sb.append("- [");
! 74: } else {
! 75: sb.append(user);
! 76: sb.append(" [");
! 77: }
! 78: dateCache(date, sb);
! 79: sb.append("] \"");
! 80: sb.append(request.getMethod());
! 81: sb.append(' ');
! 82: sb.append(requrl);
! 83: sb.append(' ');
! 84: sb.append(request.getVersion());
! 85: sb.append("\" ");
! 86: sb.append((char)('0'+ status / 100));
! 87: status = status % 100;
! 88: sb.append((char)('0'+ status / 10));
! 89: status = status % 10;
! 90: sb.append((char)('0'+ status));
! 91: sb.append(' ');
! 92: if (nbytes < 0) {
! 93: sb.append('-');
1.13 ylafon 94: } else {
1.14 ! ylafon 95: sb.append(nbytes);
1.13 ylafon 96: }
1.14 ! ylafon 97: if (request.getReferer() == null) {
! 98: if (request.getUserAgent() == null) {
! 99: sb.append(" \"-\" \"-\"");
! 100: } else {
! 101: sb.append(" \"-\" \"");
! 102: sb.append(request.getUserAgent());
! 103: sb.append('\"');
! 104: }
1.13 ylafon 105: } else {
1.14 ! ylafon 106: if (request.getUserAgent() == null) {
! 107: sb.append(" \"");
! 108: sb.append(request.getReferer());
! 109: sb.append("\" \"-\"");
! 110: } else {
! 111: sb.append(" \"");
! 112: sb.append(request.getReferer());
! 113: sb.append("\" \"");
! 114: sb.append(request.getUserAgent());
! 115: sb.append('\"');
! 116: }
1.13 ylafon 117: }
1.14 ! ylafon 118: sb.append('\n');
! 119: logs = sb.toString();
1.13 ylafon 120: }
1.14 ! ylafon 121: logmsg(logs);
1.1 ylafon 122: }
1.8 ylafon 123:
1.1 ylafon 124: /**
125: * Construct a new Logger instance.
126: */
1.8 ylafon 127:
1.1 ylafon 128: ExtendedCommonLogger () {
129: this.msgbuf = new byte[128] ;
130: }
1.8 ylafon 131:
1.1 ylafon 132: }
Webmaster