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