Package com.vtence.molecule.middlewares

Source Code of com.vtence.molecule.middlewares.ApacheCommonLogger

package com.vtence.molecule.middlewares;

import com.vtence.molecule.Request;
import com.vtence.molecule.Response;
import com.vtence.molecule.lib.AbstractMiddleware;
import com.vtence.molecule.lib.Clock;
import com.vtence.molecule.lib.SystemClock;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.TimeZone;
import java.util.logging.Logger;

public class ApacheCommonLogger extends AbstractMiddleware {

    private static final String COMMON_LOG_FORMAT = "%s - %s [%s] \"%s %s %s\" %s %s";
    private static final String DATE_FORMAT = "dd/MMM/yyyy:HH:mm:ss Z";

    private final Logger logger;
    private final Clock clock;
    private final Locale locale;
    private final TimeZone timeZone;

    public ApacheCommonLogger(Logger logger) {
        this(logger, new SystemClock());
    }

    public ApacheCommonLogger(Logger logger, Clock clock) {
        this(logger, clock, Locale.getDefault(), TimeZone.getDefault());
    }

    public ApacheCommonLogger(Logger logger, Clock clock, Locale locale, TimeZone timeZone) {
        this.logger = logger;
        this.clock = clock;
        this.locale = locale;
        this.timeZone = timeZone;
    }

    public void handle(Request request, Response response) throws Exception {
        forward(request, response);
        String msg = String.format(COMMON_LOG_FORMAT,
                request.remoteIp(),
                "-",
                currentTime(),
                request.method(),
                request.uri(),
                request.protocol(),
                response.statusCode(),
                contentLengthOrHyphen(response));
        logger.info(msg);
    }

    private String currentTime() {
        DateFormat formatter = new SimpleDateFormat(ApacheCommonLogger.DATE_FORMAT, locale);
        formatter.setTimeZone(timeZone);
        return formatter.format(clock.now());
    }

    private Object contentLengthOrHyphen(Response response) {
        return response.size() > 0 ? response.size() : "-";
    }
}
TOP

Related Classes of com.vtence.molecule.middlewares.ApacheCommonLogger

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.