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

com.hubspot.singularity.executor.config.SingularityExecutorLogging Maven / Gradle / Ivy

package com.hubspot.singularity.executor.config;

import org.slf4j.LoggerFactory;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.hubspot.singularity.InvalidSingularityTaskIdException;
import com.hubspot.singularity.SingularityTaskId;
import com.hubspot.singularity.runner.base.config.SingularityRunnerBaseLogging;

import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;

@Singleton
public class SingularityExecutorLogging {

  private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(SingularityExecutorLogging.class);

  private final SingularityRunnerBaseLogging baseLogging;

  @Inject
  public SingularityExecutorLogging(SingularityRunnerBaseLogging baseLogging) {
    this.baseLogging = baseLogging;
  }

  public Logger buildTaskLogger(String taskId, String executorId, String executorPid, String taskLogFile) {
    LOG.info("Building a task logger for {} pointing to {}", taskId, taskLogFile);

    LoggerContext context = new LoggerContext();

    context.setName(executorPid);

    baseLogging.prepareRootLogger(context);

    String loggerId = taskId;

    try {
      SingularityTaskId singularityTaskId = SingularityTaskId.valueOf(taskId);

      loggerId = String.format("%s.%s.%s.%s.%s", singularityTaskId.getRequestId(), singularityTaskId.getDeployId(), singularityTaskId.getStartedAt(),
          singularityTaskId.getInstanceNo(), executorId);

    } catch (InvalidSingularityTaskIdException e) {
      LOG.info("Handling non-SingularityTaskId %s", taskId);
    }

    Logger taskLogger = context.getLogger(loggerId);
    taskLogger.detachAndStopAllAppenders();

    if (baseLogging.getRootLogPath().isPresent()) {
      taskLogger.addAppender(baseLogging.buildFileAppender(context, baseLogging.getRootLogPath().get()));
    }
    taskLogger.addAppender(baseLogging.buildFileAppender(context, taskLogFile));

    context.start();

    return taskLogger;
  }

  public void stopTaskLogger(String taskId, Logger logger) {
    LOG.info("Stopping task logger for {}", taskId);

    try {
      logger.info("Task finished, stopping logger");

      logger.detachAndStopAllAppenders();

      logger.getLoggerContext().stop();
    } catch (Throwable t) {
      LOG.error("While closing task logger for {}", taskId, t);
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy