1 package ch.qos.logback.access.pattern; 2 3 import java.util.List; 4 5 import ch.qos.logback.access.spi.AccessEvent; 6 import ch.qos.logback.core.CoreConstants; 7 8 public class FullResponseConverter extends AccessConverter { 9 10 @Override 11 public String convert(AccessEvent ae) { 12 StringBuffer buf = new StringBuffer(); 13 14 buf.append("HTTP/1.1 "); 15 int statusCode = ae.getStatusCode(); 16 buf.append(statusCode); 17 buf.append(" "); 18 buf.append(getStatusCodeDescription(statusCode)); 19 buf.append(CoreConstants.LINE_SEPARATOR); 20 21 List<String> hnList = ae.getResponseHeaderNameList(); 22 for(String headerName: hnList) { 23 buf.append(headerName); 24 buf.append(": "); 25 buf.append(ae.getResponseHeader(headerName)); 26 buf.append(CoreConstants.LINE_SEPARATOR); 27 } 28 buf.append(CoreConstants.LINE_SEPARATOR); 29 buf.append(ae.getResponseContent()); 30 buf.append(CoreConstants.LINE_SEPARATOR); 31 return buf.toString(); 32 } 33 34 static String getStatusCodeDescription(int sc) { 35 switch(sc) { 36 case 200: return "OK"; 37 case 201: return "Created"; 38 case 202: return "Accepted"; 39 case 203: return "Non-Authoritative Information"; 40 case 204: return "No Content"; 41 case 205: return "Reset Content"; 42 case 206: return "Partial Content"; 43 case 300: return "Multiple Choices"; 44 case 301: return "Moved Permanently"; 45 case 302: return "Found"; 46 case 303: return "See Other"; 47 case 304: return "Not Modified"; 48 case 305: return "Use Proxy"; 49 case 306: return "(Unused)"; 50 case 307: return "Temporary Redirect"; 51 case 400: return "Bad Request"; 52 case 401: return "Unauthorized"; 53 case 402: return "Payment Required"; 54 case 403: return "Forbidden"; 55 case 404: return "Not Found"; 56 case 405: return "Method Not Allowed"; 57 case 406: return "Not Acceptable"; 58 case 407: return "Proxy Authentication Required"; 59 case 408: return "Request Timeout"; 60 case 409: return "Conflict"; 61 case 410: return "Gone"; 62 case 411: return "Length Required"; 63 case 412: return "Precondition Failed"; 64 case 413: return "Request Entity Too Large"; 65 case 414: return "Request-URI Too Long"; 66 case 415: return "Unsupported Media Type"; 67 case 416: return "Requested Range Not Satisfiable"; 68 case 417: return "Expectation Failed"; 69 case 500: return "Internal Server Error"; 70 case 501: return "Not Implemented"; 71 case 502: return "Bad Gateway"; 72 case 503: return "Service Unavailable"; 73 case 504: return "Gateway Timeout"; 74 case 505: return "HTTP Version Not Supported"; 75 default: return "NA"; 76 } 77 } 78 }