@Override public Appender<E> build(LoggerContext context, String applicationName, LayoutFactory<E> layoutFactory, LevelFilterFactory<E> levelFilterFactory, AsyncAppenderFactory<E> asyncAppenderFactory) { final OutputStreamAppender<E> appender = appender(context); final LayoutWrappingEncoder<E> layoutEncoder = new LayoutWrappingEncoder<>(); layoutEncoder.setLayout(buildLayout(context, layoutFactory)); appender.setEncoder(layoutEncoder); appender.addFilter(levelFilterFactory.build(threshold)); getFilterFactories().forEach(f -> appender.addFilter(f.build())); appender.start(); return wrapAsync(appender, asyncAppenderFactory); } }
@Override public void setVerboseMode(boolean verboseMode) { this.verboseMode = verboseMode; if (verboseMode) { PatternLayoutEncoder patternLayoutEncoder = new PatternLayoutEncoder(); patternLayoutEncoder.setPattern("[%d{HH:mm:ss.SSS}] [%highlight(%level)] %msg%n"); patternLayoutEncoder.setContext(loggerContext); patternLayoutEncoder.start(); Appender<ILoggingEvent> consoleAppender = new ConsoleAppender(); ((OutputStreamAppender) consoleAppender).setEncoder(patternLayoutEncoder); consoleAppender.setContext(loggerContext); consoleAppender.start(); loggerContext.getLogger("com.paypal.butterfly.cli").detachAppender("CONSOLE"); loggerContext.getLogger("ROOT").addAppender(consoleAppender); // } else { // TODO } }
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; }
/** Perform the base configure of appender. * @param context the context of logger. * @param appenderName the name of appender. * @param appender the class instance of appender. */ public void configure(LoggerContext context, String appenderName, OutputStreamAppender<ILoggingEvent> appender) { PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setPattern(logFormatPattern); encoder.setContext(context); encoder.start(); appender.setContext(context); appender.setName(appenderName); appender.setEncoder(encoder); appender.start(); Logger logger = context.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME); logger.addAppender(appender); logger.setAdditive(true); }
/** Perform the base configure of appender. * @param context the context of logger. * @param appenderName the name of appender. * @param appender the class instance of appender. */ public void configure(LoggerContext context, String appenderName, OutputStreamAppender<ILoggingEvent> appender) { PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setPattern(logFormatPattern); encoder.setContext(context); encoder.start(); appender.setContext(context); appender.setName(appenderName); appender.setEncoder(encoder); appender.start(); Logger logger = context.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME); logger.addAppender(appender); logger.setAdditive(true); }
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; } }
private static void configureLogging(File logFile, Level level) { LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); OutputStreamAppender<ILoggingEvent> appender; if (logFile == null) { appender = configureConsoleLogging(loggerContext); } else { appender = configureFileLogging(logFile, loggerContext); } System.out.println("Logging: The log level is set to " + level); PatternLayoutEncoder patternLayoutEncoder = new PatternLayoutEncoder(); patternLayoutEncoder.setPattern(LogDescription.LOG_PATTERN); patternLayoutEncoder.setContext(loggerContext); patternLayoutEncoder.start(); appender.setEncoder(patternLayoutEncoder); appender.start(); ch.qos.logback.classic.Logger rootLogger = loggerContext.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME); loggerContext.stop(); rootLogger.detachAndStopAllAppenders(); rootLogger.addAppender(appender); rootLogger.setLevel(level); SLF4JBridgeHandler.removeHandlersForRootLogger(); SLF4JBridgeHandler.install(); LevelChangePropagator levelChangePropagator = new LevelChangePropagator(); levelChangePropagator.setResetJUL(true); levelChangePropagator.setContext(loggerContext); levelChangePropagator.start(); loggerContext.addListener(levelChangePropagator); loggerContext.start(); }
private static void configureLogging(File logFile, Level level) { LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); OutputStreamAppender<ILoggingEvent> appender; if (logFile == null) { appender = configureConsoleLogging(loggerContext); } else { appender = configureFileLogging(logFile, loggerContext); } System.out.println("Logging: The log level is set to " + level); PatternLayoutEncoder patternLayoutEncoder = new PatternLayoutEncoder(); patternLayoutEncoder.setPattern(LogDescription.LOG_PATTERN); patternLayoutEncoder.setContext(loggerContext); patternLayoutEncoder.start(); appender.setEncoder(patternLayoutEncoder); appender.start(); ch.qos.logback.classic.Logger rootLogger = loggerContext.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME); loggerContext.stop(); rootLogger.detachAndStopAllAppenders(); rootLogger.addAppender(appender); rootLogger.setLevel(level); SLF4JBridgeHandler.removeHandlersForRootLogger(); SLF4JBridgeHandler.install(); LevelChangePropagator levelChangePropagator = new LevelChangePropagator(); levelChangePropagator.setResetJUL(true); levelChangePropagator.setContext(loggerContext); levelChangePropagator.start(); loggerContext.addListener(levelChangePropagator); loggerContext.start(); }
@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); }
@Override public Appender<E> build(LoggerContext context, String applicationName, LayoutFactory<E> layoutFactory, LevelFilterFactory<E> levelFilterFactory, AsyncAppenderFactory<E> asyncAppenderFactory) { final OutputStreamAppender<E> appender = appender(context); final LayoutWrappingEncoder<E> layoutEncoder = new LayoutWrappingEncoder<>(); layoutEncoder.setLayout(buildLayout(context, layoutFactory)); appender.setEncoder(layoutEncoder); appender.addFilter(levelFilterFactory.build(threshold)); getFilterFactories().forEach(f -> appender.addFilter(f.build())); appender.start(); return wrapAsync(appender, asyncAppenderFactory); } }
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)); }
appender = new OutputStreamAppender<>(); appender.setContext(context); appender.setEncoder(patternLayoutEncoder); appender.setOutputStream(logOutput.getPrintStream()); appender.setName(name);