package com.vtence.molecule.middlewares; import com.vtence.molecule.Request; import com.vtence.molecule.Response; import com.vtence.molecule.http.HeaderNames; import com.vtence.molecule.http.HttpMethod; import java.time.Clock; import java.util.Locale; import java.util.function.Consumer; import java.util.logging.Logger; public class ApacheCombinedLogger extends ApacheLogger { private static final String COMBINED_LOG_FORMAT = "%s - - [%s] \"%s %s %s\" %s %s \"%s\" \"%s\""; public ApacheCombinedLogger(Logger logger) { super(logger); } public ApacheCombinedLogger(Logger logger, Clock clock, Locale locale) { super(logger, clock, locale); } @Override protected Consumer<Response> logAccess(Request request) { String remoteIp = request.remoteIp(); HttpMethod method = request.method(); String uri = request.uri(); String protocol = request.protocol(); String referer = request.header(HeaderNames.REFERER); String userAgent = request.header(HeaderNames.USER_AGENT); return response -> { String msg = String.format(COMBINED_LOG_FORMAT, remoteIp, currentTime(), method, uri, protocol, response.statusCode(), contentLengthOf(response), nullToEmpty(referer), nullToEmpty(userAgent)); logger.info(msg); }; } }