
com.yammer.dropwizard.config.RequestLogHandlerFactory Maven / Gradle / Ivy
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