package com.logentries.log4j2; import java.util.concurrent.TimeUnit; import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.appender.AbstractManager; import org.apache.logging.log4j.core.appender.ManagerFactory; import org.apache.logging.log4j.core.async.AsyncLoggerContext; import com.logentries.net.AsyncLogger; /** * Responsible for managing the actual connection to Logentries. * Created by josh on 11/15/14. */ public class LogentriesManager extends AbstractManager { private static LogentriesManagerFactory FACTORY = new LogentriesManagerFactory(); static LogentriesManager getManager(String name, FactoryData data) { return getManager(name, FACTORY, data); } static class LogentriesManagerFactory implements ManagerFactory<LogentriesManager, FactoryData> { @Override public LogentriesManager createManager(String name, FactoryData data) { return new LogentriesManager(new LoggerContext(name), name, data); } } private final AsyncLogger asyncLogger; protected LogentriesManager(LoggerContext loggerContext, String name, FactoryData data) { super(loggerContext, name); asyncLogger = new AsyncLogger(); asyncLogger.setToken(data.getToken()); asyncLogger.setKey(data.getKey()); asyncLogger.setLocation(nullToEmpty(data.getLocation())); asyncLogger.setHttpPut(data.isHttpPut()); asyncLogger.setSsl(data.isSsl()); asyncLogger.setDebug(data.isDebug()); asyncLogger.setUseDataHub(data.isUseDataHub()); asyncLogger.setDataHubAddr(data.getDataHubAddr()); asyncLogger.setDataHubPort(data.getDataHubPort()); asyncLogger.setLogHostName(data.isLogHostName()); // AsyncLogger doesn't like it when hostName is null. [jsd] asyncLogger.setHostName(nullToEmpty(data.getHostName())); // AsyncLogger doesn't like it when logID is null. [jsd] asyncLogger.setLogID(nullToEmpty(data.getLogID())); LOGGER.debug("AsyncLogger created."); } private String nullToEmpty(String s) { return s == null ? "" : s; } @Override protected boolean releaseSub(final long timeout, final TimeUnit timeUnit) { asyncLogger.close(); LOGGER.debug("AsyncLogger closed."); return true; } public void writeLine(String line) { asyncLogger.addLineToQueue(line); } }