All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.outbrain.ob1k.server.services.Log4jTailService Maven / Gradle / Ivy

The newest version!
package com.outbrain.ob1k.server.services;

import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.spi.LoggingEvent;
import rx.Observable;
import rx.subjects.ReplaySubject;

/**
 * Streams the log4j messages starting from the first message that arrived after the call to this API, AKA log tail ;).
 *
 * @author Eran Harel
 */
public class Log4jTailService implements ILogService {
  public Observable handle() {
    return TailAppender.instance.publishSubject;
  }

  private static class TailAppender extends AppenderSkeleton {
    private static final TailAppender instance = new TailAppender();
    private final ReplaySubject publishSubject = ReplaySubject.createWithSize(20);

    private TailAppender() {
      layout = new PatternLayout("%d %-5p [%t] [%C{1}:%L] - %m%n");
      final Logger rootLogger = Logger.getRootLogger();
      rootLogger.addAppender(this);
    }

    @Override
    protected void append(final LoggingEvent event) {
      if (closed) {
        return;
      }

      publishSubject.onNext(layout.format(event));
    }

    @Override
    public void close() {
      this.closed = true;
      publishSubject.onCompleted();
    }

    @Override
    public boolean requiresLayout() {
      return false;
    }

  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy