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

io.github.oliviercailloux.jsand.containerized.logback.RemoteClientAppender Maven / Gradle / Ivy

The newest version!
package io.github.oliviercailloux.jsand.containerized.logback;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.AppenderBase;
import com.google.common.base.VerifyException;
import io.github.oliviercailloux.jsand.common.JSand;
import io.github.oliviercailloux.jsand.common.RemoteLoggerService;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.time.Instant;
import org.slf4j.event.Level;

public class RemoteClientAppender extends AppenderBase {
  private RemoteLoggerService remoteLogger;

  @Override
  public void start() {
    Registry registryJ1;
    try {
      registryJ1 = LocateRegistry.getRegistry(JSand.REGISTRY_HOST, Registry.REGISTRY_PORT);
      remoteLogger = (RemoteLoggerService) registryJ1.lookup(JSand.LOGGER_SERVICE_NAME);
    } catch (RemoteException | NotBoundException e) {
      throw new RuntimeException(e);
    }
    super.start();
  }

  @Override
  public void append(ILoggingEvent event) {
    long timeStamp = event.getTimeStamp();
    int logbackIntLevel = event.getLevel().toInt();
    String originalLoggerName = event.getLoggerName();
    Level slfLevel;
    switch (logbackIntLevel) {
      case ch.qos.logback.classic.Level.TRACE_INT:
        slfLevel = Level.TRACE;
        break;
      case ch.qos.logback.classic.Level.DEBUG_INT:
        slfLevel = Level.DEBUG;
        break;
      case ch.qos.logback.classic.Level.INFO_INT:
        slfLevel = Level.INFO;
        break;
      case ch.qos.logback.classic.Level.WARN_INT:
        slfLevel = Level.WARN;
        break;
      case ch.qos.logback.classic.Level.ERROR_INT:
        slfLevel = Level.ERROR;
        break;
      default:
        throw new VerifyException("Unexpected logback level: " + logbackIntLevel);
    }

    String message = event.getMessage();
    Object[] argumentArray = event.getArgumentArray();
    try {
      remoteLogger.log(originalLoggerName, slfLevel, Instant.ofEpochMilli(timeStamp), message,
          argumentArray);
    } catch (RemoteException e) {
      throw new IllegalStateException(e);
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy