private OutputStreamAppender<ILoggingEvent> createAppender(final OutputStream logMessageOutputStream, final Encoder<ILoggingEvent> encoder) { final OutputStreamAppender<ILoggingEvent> appender = new OutputStreamAppender<ILoggingEvent>(); appender.setContext(loggerContext); appender.setEncoder(encoder); appender.setOutputStream(logMessageOutputStream); appender.setName(OUTPUT_STREAM_APPENDER_NAME); appender.start(); return appender; }
private static OutputStreamAppender<ILoggingEvent> buildAppender(final Encoder<ILoggingEvent> encoder, final OutputStream outputStream) { OutputStreamAppender<ILoggingEvent> appender = new OutputStreamAppender<ILoggingEvent>(); appender.setName("logcapture"); appender.setContext(ContextSelectorStaticBinder.getSingleton().getContextSelector().getDefaultLoggerContext()); appender.setEncoder(encoder); appender.setOutputStream(outputStream); appender.start(); return appender; } }
/** * Test log statistics store. * * @throws Exception the exception */ @Test public void testLogStatisticsStore() throws Exception { LogStatisticsStore store = new LogStatisticsStore(); store.initialize(LensServerConf.getHiveConf()); // Do some initialization work ByteArrayOutputStream writer = new ByteArrayOutputStream(); Logger l = (Logger) LoggerFactory.getLogger(MyLoggableLens.class); OutputStreamAppender<ILoggingEvent> appender = new OutputStreamAppender<ILoggingEvent>(); appender.setLayout(new StatisticsLogLayout()); appender.setContext(l.getLoggerContext()); appender.setOutputStream(writer); appender.setName(MyLoggableLens.class.getCanonicalName()); appender.start(); l.addAppender(appender); MyLoggableLens sampleEvent = new MyLoggableLens(System.currentTimeMillis()); store.process(sampleEvent); writer.flush(); l.detachAppender(appender); appender.stop(); ObjectMapper mapper = new ObjectMapper(); String expected = mapper.writeValueAsString(sampleEvent); Assert.assertEquals(new String(writer.toByteArray(), "UTF-8").trim(), expected.trim()); writer.close(); } }
@Test public void testLogAppenderCanAccessTraceId() throws Exception { // Augment logger with custom appender whose output we can read ch.qos.logback.classic.LoggerContext lc = (ch.qos.logback.classic.LoggerContext) LoggerFactory.getILoggerFactory(); ch.qos.logback.classic.encoder.PatternLayoutEncoder ple = new ch.qos.logback.classic.encoder.PatternLayoutEncoder(); ple.setPattern("traceId: %X{traceId} %-5level [%thread]: %message%n"); ple.setContext(lc); ple.start(); ch.qos.logback.core.OutputStreamAppender<ch.qos.logback.classic.spi.ILoggingEvent> appender = new ch.qos.logback.core.OutputStreamAppender<>(); appender.setEncoder(ple); appender.setContext(lc); ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); appender.setOutputStream(byteStream); appender.start(); log.addAppender(appender); // Invoke server and observe servers log messages; note that the server uses the same logger at INFO. log.setLevel(ch.qos.logback.classic.Level.INFO); target.path("trace").request().header(TraceHttpHeaders.TRACE_ID, "myTraceId").get(); Assert.assertThat( byteStream.toString(StandardCharsets.UTF_8.name()), Matchers.startsWith("traceId: myTraceId")); }
@Test public void testSimpleRequestWithLogging() throws IOException, ServletException { Logging.initialize(); String expectedMessage = "FooBarBaz"; OutputStream stream = new ByteArrayOutputStream(); ch.qos.logback.classic.Logger rackLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("helloworldsinatra.rb:HEAD /name-echo"); rackLogger.setLevel(Level.ALL); LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setPattern("%m%n"); encoder.setContext(context); encoder.start(); OutputStreamAppender<ILoggingEvent> streamAppender = new OutputStreamAppender<ILoggingEvent>(); streamAppender.setContext(context); streamAppender.setEncoder(encoder); streamAppender.setOutputStream(stream); // needs to happen after setEncoder() streamAppender.start(); rackLogger.addAppender(streamAppender); assertEquals(performRequest("name=" + expectedMessage, "/name-echo", "", "GET"), expectedMessage); streamAppender.stop(); Assertions.assertContains(stream.toString(), "name-echo was called with " + expectedMessage); }
public void headerFooterCheck(String fileHeader, String presentationHeader, String presentationFooter, String fileFooter) { OutputStreamAppender<Object> wa = new OutputStreamAppender<Object>(); wa.setContext(context); ByteArrayOutputStream baos = new ByteArrayOutputStream(); SamplePatternLayout<Object> spl = new SamplePatternLayout<Object>(); spl.setContext(context); spl.setFileHeader(fileHeader); spl.setPresentationHeader(presentationHeader); spl.setPresentationFooter(presentationFooter); spl.setFileFooter(fileFooter); spl.start(); LayoutWrappingEncoder<Object> encoder = new LayoutWrappingEncoder<Object>(); encoder.setLayout(spl); encoder.setContext(context); wa.setEncoder(encoder); wa.setOutputStream(baos); wa.start(); wa.stop(); String result = baos.toString(); String expectedHeader = emtptyIfNull(fileHeader) + emtptyIfNull(presentationHeader); System.out.println(result); assertTrue(result, result.startsWith(expectedHeader)); String expectedFooter = emtptyIfNull(presentationFooter) + emtptyIfNull(fileFooter); assertTrue(result, result.endsWith(expectedFooter)); }
final OutputStreamAppender<ILoggingEvent> appender; if (logOutput.isConsole()) { appender = new OutputStreamAppender<>(); appender.setContext(context); appender.setEncoder(patternLayoutEncoder);