package grails.plugin.lightweightdeploy.logging; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.OutputStreamAppender; import ch.qos.logback.core.spi.AppenderAttachableImpl; import com.codahale.metrics.Clock; import grails.plugin.lightweightdeploy.Configuration; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.handler.RequestLogHandler; import org.slf4j.LoggerFactory; public class RequestLoggingFactory { private final Configuration config; public RequestLoggingFactory(Configuration config) { this.config = config; } public Handler configure() { final Logger logger = (Logger) LoggerFactory.getLogger("http.request"); logger.setAdditive(false); final LoggerContext context = logger.getLoggerContext(); final AppenderAttachableImpl<ILoggingEvent> appenders = new AppenderAttachableImpl<ILoggingEvent>(); final RequestLogLayout layout = new RequestLogLayout(); layout.start(); for (OutputStreamAppender<ILoggingEvent> appender : LogbackFactory.buildAppenders(config.getRequestLogConfiguration(), context)) { appender.stop(); appender.setLayout(layout); appender.start(); appenders.addAppender(appender); } final RequestLogHandler handler = new RequestLogHandler(); handler.setRequestLog(new AsyncRequestLog(Clock.defaultClock(), appenders, config.getRequestLogConfiguration().getTimeZone(), config.getRequestLogConfiguration().getCookies())); return handler; } }