package eu.europeana.cloud.service.commons.logging;
import kafka.producer.KafkaLog4jAppender;
import org.apache.log4j.Appender;
import org.apache.log4j.EnhancedPatternLayout;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.Priority;
import java.util.Enumeration;
public class LoggerUpdater {
public void addKafkaAppender(Logger logger, String brokerList, String topicName, String applicationName, String hostname) {
EnhancedPatternLayout layout = new EnhancedPatternLayout();
layout.setConversionPattern("%d{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}{GMT} " + applicationName + " " + hostname + " [%C] - %p : %m");
KafkaLog4jAppender kafkaAppender = new KafkaLog4jAppender();
kafkaAppender.setThreshold(Level.INFO);
kafkaAppender.setName("kafka.producer.KafkaLog4jAppender");
kafkaAppender.setLayout(layout);
kafkaAppender.setBrokerList(brokerList);
kafkaAppender.setTopic(topicName);
kafkaAppender.setProducerType("async");
kafkaAppender.activateOptions();
logger.addAppender(kafkaAppender);
}
/**
* Replaces selected text to another in all appenders of selected logger
*
* @param logger logger selected for update
* @param textToReplace part of addender's pattern that will be replaced
* @param newValue replacement
*/
public void update(Logger logger, String textToReplace, String newValue) {
Enumeration<Appender> appenderEnumerator = logger.getAllAppenders();
while (appenderEnumerator.hasMoreElements()) {
Appender appender = appenderEnumerator.nextElement();
updateAppender(appender, textToReplace, newValue);
}
}
private void updateAppender(Appender appender, String textToReplace, String newValue) {
EnhancedPatternLayout t = null;
if (appender.getLayout() instanceof PatternLayout) {
PatternLayout patternLayout = (PatternLayout) appender.getLayout();
String pattern = patternLayout.getConversionPattern();
patternLayout.setConversionPattern(patternLayout.getConversionPattern().replace(textToReplace, newValue));
} else if (appender.getLayout() instanceof EnhancedPatternLayout) {
EnhancedPatternLayout patternLayout = (EnhancedPatternLayout) appender.getLayout();
String pattern = patternLayout.getConversionPattern();
patternLayout.setConversionPattern(patternLayout.getConversionPattern().replace(textToReplace, newValue));
}
}
}