@Override public void start() { setOutputStream(datagramSocketOutputStream(host, port)); super.start(); }
@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 protected OutputStreamAppender<E> appender(LoggerContext context) { final OutputStreamAppender<E> appender = new DropwizardSocketAppender<>(host, port, (int) connectionTimeout.toMilliseconds(), (int) sendBufferSize.toBytes(), socketFactory()); appender.setContext(context); appender.setName("tcp-socket-appender"); appender.setImmediateFlush(immediateFlush); return appender; }
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); }
/** * <p> * Sets the @link OutputStream} where the log output will go. The specified * <code>OutputStream</code> must be opened by the user and be writable. The * <code>OutputStream</code> will be closed when the appender instance is * closed. * * @param outputStream * An already opened OutputStream. */ public void setOutputStream(OutputStream outputStream) { lock.lock(); try { // close any previously opened output stream closeOutputStream(); this.outputStream = outputStream; if (encoder == null) { addWarn("Encoder has not been set. Cannot invoke its init method."); return; } encoderInit(); } finally { lock.unlock(); } }
/** * 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(); } }
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(); }
@Override protected void subAppend(E event) { if (!initialized && lazyInit) { initialized = true; if (checkForFileCollisionInPreviousFileAppenders()) { addError("Collisions detected with FileAppender/RollingAppender instances defined earlier. Aborting."); addError(COLLISION_WITH_EARLIER_APPENDER_URL); } else { try { openFile(getFile()); super.start(); } catch (IOException e) { this.started = false; addError("openFile(" + fileName + "," + append + ") failed", e); } } } super.subAppend(event); }
@Override protected void writeOut(E event) throws IOException { if (prudent) { safeWrite(event); } else { super.writeOut(event); } } }
@Override public void stop() { super.stop(); }
void encoderClose() { if (encoder != null && this.outputStream != null) { try { byte[] footer = encoder.footerBytes(); writeBytes(footer); } catch (IOException ioe) { this.started = false; addStatus(new ErrorStatus("Failed to write footer for appender named [" + name + "].", this, ioe)); } } }
/** * Stop this appender instance. The underlying stream or writer is also * closed. * * <p> * Stopped appenders cannot be reused. */ public void stop() { lock.lock(); try { closeOutputStream(); super.stop(); } finally { lock.unlock(); } }
void encoderInit() { if (encoder != null && this.outputStream != null) { try { encoder.init(outputStream); } catch (IOException ioe) { this.started = false; addStatus(new ErrorStatus( "Failed to initialize encoder for appender named [" + name + "].", this, ioe)); } } }
/** * Close the underlying {@link OutputStream}. */ protected void closeOutputStream() { if (this.outputStream != null) { try { // before closing we have to output out layout's footer encoderClose(); this.outputStream.close(); this.outputStream = null; } catch (IOException e) { addStatus(new ErrorStatus( "Could not close output stream for OutputStreamAppender.", this, e)); } } }
private void dispatchEvents() throws InterruptedException, IOException { while (true) { E event = deque.takeFirst(); super.subAppend(event); this.getOutputStream().write('\0'); } }
@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 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; } }