package eu.europeana.cloud.service.commons.logging; import eu.europeana.cloud.service.coordination.registration.ZookeeperServiceAdvertiser; import org.apache.log4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.PostConstruct; import java.net.Inet4Address; import java.net.UnknownHostException; /** * Configures log4j logger using values stored in zookeeper.<br/><br/> * 1. Inserts unique instance name into log message;<br/> * 2. Configures kafka appender;<br/> */ public class ZookeeperLoggingConfigurator extends LoggingConfigurator { private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(ZookeeperLoggingConfigurator.class); private ZookeeperServiceAdvertiser serviceAdvertiser; private String kafkaBrokerList; private String kafkaTopicName; public ZookeeperLoggingConfigurator( ZookeeperServiceAdvertiser serviceAdvertiser, String kafkaBrokerList, String kafkaTopicName) { this.serviceAdvertiser = serviceAdvertiser; this.kafkaBrokerList = kafkaBrokerList; this.kafkaTopicName = kafkaTopicName; } @PostConstruct @Override public void configure() { LOGGER.info("Start configuring logging system using Zookeeper"); String serviceName = serviceAdvertiser.getServiceProperties().getServiceName().toLowerCase(); String hostname = readHostname(serviceAdvertiser); Logger applicationRootLogger = Logger.getRootLogger(); loggerUpdater.update(applicationRootLogger, APPLICATION_INSTANCE_NAME_MARKER, hostname); loggerUpdater.addKafkaAppender(applicationRootLogger, kafkaBrokerList, kafkaTopicName, serviceName, hostname); LOGGER.info("Logging system configuration finished"); } }