All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.yammer.dropwizard.config.RequestLogHandlerFactory Maven / Gradle / Ivy

There is a newer version: 0.6.2
Show newest version
package com.yammer.dropwizard.config;

import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.net.SyslogAppender;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.ConsoleAppender;
import ch.qos.logback.core.CoreConstants;
import ch.qos.logback.core.LayoutBase;
import ch.qos.logback.core.rolling.RollingFileAppender;
import ch.qos.logback.core.spi.AppenderAttachableImpl;
import com.google.common.base.Optional;
import com.yammer.dropwizard.jetty.AsyncRequestLog;
import com.yammer.dropwizard.logging.LogbackFactory;
import org.eclipse.jetty.server.handler.RequestLogHandler;
import org.slf4j.LoggerFactory;

import static com.yammer.dropwizard.config.LoggingConfiguration.ConsoleConfiguration;
import static com.yammer.dropwizard.config.LoggingConfiguration.FileConfiguration;

// TODO: 11/7/11  -- document RequestLogHandlerFactory
// TODO: 11/7/11  -- test RequestLogHandlerFactory

public class RequestLogHandlerFactory {
    private static class RequestLogLayout extends LayoutBase {
        @Override
        public String doLayout(ILoggingEvent event) {
            return event.getFormattedMessage() + CoreConstants.LINE_SEPARATOR;
        }
    }

    private final RequestLogConfiguration config;
    private final String name;

    public RequestLogHandlerFactory(RequestLogConfiguration config, String name) {
        this.config = config;
        this.name = name;
    }
    
    public boolean isEnabled() {
        return config.getConsoleConfiguration().isEnabled() ||
                config.getFileConfiguration().isEnabled() ||
                config.getSyslogConfiguration().isEnabled();
    }

    public RequestLogHandler build() {
        final Logger logger = (Logger) LoggerFactory.getLogger("http.request");
        logger.setAdditive(false);
        final LoggerContext context = logger.getLoggerContext();

        final AppenderAttachableImpl appenders = new AppenderAttachableImpl();

        final RequestLogLayout layout = new RequestLogLayout();
        layout.start();

        final ConsoleConfiguration console = config.getConsoleConfiguration();
        if (console.isEnabled()) {
            final ConsoleAppender appender = LogbackFactory.buildConsoleAppender(console,
                                                                                                context,
                                                                                                Optional.absent());
            appender.stop();
            appender.setLayout(layout);
            appender.start();
            appenders.addAppender(appender);
        }

        final FileConfiguration file = config.getFileConfiguration();
        if (file.isEnabled()) {
            final RollingFileAppender appender = LogbackFactory.buildFileAppender(file,
                                                                                                 context,
                                                                                                 Optional.absent());

            appender.stop();
            appender.setLayout(layout);
            appender.start();
            appenders.addAppender(appender);
        }

        final LoggingConfiguration.SyslogConfiguration syslog = config.getSyslogConfiguration();
        if (syslog.isEnabled()) {
            final SyslogAppender appender = LogbackFactory.buildSyslogAppender(syslog,
                                                                               context,
                                                                               name + "-requests",
                                                                               Optional.absent());

            appender.stop();
            appender.setLayout(layout);
            appender.start();
            appenders.addAppender(appender);
        }

        final RequestLogHandler handler = new RequestLogHandler();
        handler.setRequestLog(new AsyncRequestLog(appenders, config.getTimeZone()));

        return handler;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy