Programmatically add OutputStreamAppender to all loggers

Hi, I am building a simple web application that can be used to preview the pattern layout of log files. The application aims to give you an idea of what your log files will look like if you use a pattern layout. Here you can see it working for the Log4j PatternLayout (still in progress): http://log-preview.appspot.com/ Feel free to play around with, it is self explanatory. I want to add support for Logback as well. The idea is that I have a simple API, that is a servlet that receives a pattern as a parameter. I then create an appender with that pattern layout and attach it to the loggers of some classes. The appender actually appends to the response stream, so the logs are actually the response of the API. So, as I used a WriterAppender for log4j, I suppose an OutputStreamAppender is the equivalent for Logback. Unfortunately, I have not managed to append anything to the result stream. Could you see what is wring with my code? It was dead simple with Log4j, but I am still getting trouble here. Thanks! P.S. This is stripped down version that I think should be printing a log in the response package com.markos.logpreview; import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.PatternLayout; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.OutputStreamAppender; @SuppressWarnings("serial") public class Log_previewServlet extends HttpServlet { @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throwsIOException { resp.setContentType("text/plain"); LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); loggerContext.reset(); OutputStreamAppender<ILoggingEvent> outputStreamAppender = newOutputStreamAppender<ILoggingEvent>(); outputStreamAppender.setContext(loggerContext); outputStreamAppender.setOutputStream(resp.getOutputStream()); PatternLayout pl = new PatternLayout(); pl.setPattern("%d %5p %t [%c:%L] %m%n)"); pl.setContext(loggerContext); pl.start(); outputStreamAppender.setLayout(pl); outputStreamAppender.start(); Logger logbackLogger = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME); logbackLogger.addAppender(outputStreamAppender); * logbackLogger.error("I should show up in the response!");* } } -- Sent from my iPhone
participants (1)
-
Markos Fragkakis