/** * Logback: the reliable, generic, fast and flexible logging framework. * Copyright (C) 1999-2015, QOS.ch. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ package ch.qos.logback.access.pattern; import java.util.List; import ch.qos.logback.access.spi.IAccessEvent; import ch.qos.logback.core.CoreConstants; public class FullResponseConverter extends AccessConverter { @Override public String convert(IAccessEvent ae) { StringBuilder buf = new StringBuilder(); buf.append("HTTP/1.1 "); int statusCode = ae.getStatusCode(); buf.append(statusCode); buf.append(" "); buf.append(getStatusCodeDescription(statusCode)); buf.append(CoreConstants.LINE_SEPARATOR); List<String> hnList = ae.getResponseHeaderNameList(); for (String headerName : hnList) { buf.append(headerName); buf.append(": "); buf.append(ae.getResponseHeader(headerName)); buf.append(CoreConstants.LINE_SEPARATOR); } buf.append(CoreConstants.LINE_SEPARATOR); buf.append(ae.getResponseContent()); buf.append(CoreConstants.LINE_SEPARATOR); return buf.toString(); } static String getStatusCodeDescription(int sc) { switch (sc) { case 200: return "OK"; case 201: return "Created"; case 202: return "Accepted"; case 203: return "Non-Authoritative Information"; case 204: return "No Content"; case 205: return "Reset Content"; case 206: return "Partial Content"; case 300: return "Multiple Choices"; case 301: return "Moved Permanently"; case 302: return "Found"; case 303: return "See Other"; case 304: return "Not Modified"; case 305: return "Use Proxy"; case 306: return "(Unused)"; case 307: return "Temporary Redirect"; case 400: return "Bad Request"; case 401: return "Unauthorized"; case 402: return "Payment Required"; case 403: return "Forbidden"; case 404: return "Not Found"; case 405: return "Method Not Allowed"; case 406: return "Not Acceptable"; case 407: return "Proxy Authentication Required"; case 408: return "Request Timeout"; case 409: return "Conflict"; case 410: return "Gone"; case 411: return "Length Required"; case 412: return "Precondition Failed"; case 413: return "Request Entity Too Large"; case 414: return "Request-URI Too Long"; case 415: return "Unsupported Media Type"; case 416: return "Requested Range Not Satisfiable"; case 417: return "Expectation Failed"; case 500: return "Internal Server Error"; case 501: return "Not Implemented"; case 502: return "Bad Gateway"; case 503: return "Service Unavailable"; case 504: return "Gateway Timeout"; case 505: return "HTTP Version Not Supported"; default: return "NA"; } } }