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