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

org.sidao.kafkaLogback.KafKaAppenderAutoConfiguration Maven / Gradle / Ivy

package org.sidao.kafkaLogback;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
import org.sidao.github.danielwegener.logback.kafka.KafkaAppender;
import org.sidao.github.danielwegener.logback.kafka.encoding.LayoutKafkaMessageEncoder;
import net.logstash.logback.fieldnames.ShortenedFieldNames;
import net.logstash.logback.layout.LogstashLayout;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

/**
 * @author Create by lixz
 */
@Configuration
@Import(KafkaAppenderProperties.class)
@ConditionalOnProperty(prefix = "kafka",name = "producer-config")
public class KafKaAppenderAutoConfiguration  {
    @Bean
    @ConditionalOnMissingBean
    public KafkaAppenderProperties kafkaAppenderProperties() {
        return new KafkaAppenderProperties();
}

    @Bean
    public Logger programmableAppender(KafkaAppenderProperties kafkaAppenderProperties ) {
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
        Logger logger = null;
        Logger loggerd = null;
        if("root".equals(kafkaAppenderProperties.getModleType())){
             logger = ((LoggerContext) LoggerFactory.getILoggerFactory()).getLoggerList().get(0);
        }else if("logger".equals(kafkaAppenderProperties.getModleType())){
              if(kafkaAppenderProperties.getLoggername()==null||"".equals(kafkaAppenderProperties.getLoggername())){
                  try {
                      throw  new Exception("缺少logname");
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
             logger = ((LoggerContext) LoggerFactory.getILoggerFactory()).getLogger(kafkaAppenderProperties.getLoggername());
              logger.setLevel(Level.INFO);
              logger.setAdditive(false);
        }else if("rootAndLogger".equals(kafkaAppenderProperties.getModleType())){
            if(kafkaAppenderProperties.getLoggername()==null||"".equals(kafkaAppenderProperties.getLoggername())){
                try {
                    throw  new Exception("缺少logname");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            logger = ((LoggerContext) LoggerFactory.getILoggerFactory()).getLoggerList().get(0);
            loggerd =((LoggerContext) LoggerFactory.getILoggerFactory()).getLogger(kafkaAppenderProperties.getLoggername());
            loggerd.setAdditive(false);
            loggerd.setLevel(Level.INFO);
        }else{
            logger = ((LoggerContext) LoggerFactory.getILoggerFactory()).getLoggerList().get(0);
        }

        if(kafkaAppenderProperties.isEnable()){
            try {
                KafkaAppender kafkaAppender = new KafkaAppender();
                kafkaAppender.addProducerConfig(kafkaAppenderProperties.getProducerConfig());
                LayoutKafkaMessageEncoder kafkaMessageEncoder = new LayoutKafkaMessageEncoder();
                LogstashLayout layout = new LogstashLayout();
                layout.setIncludeContext(kafkaAppenderProperties.isIncludeContext());
                layout.setIncludeCallerData(kafkaAppenderProperties.isIncludeCallerData());
                layout.setFieldNames(new ShortenedFieldNames());
                layout.setCustomFields(kafkaAppenderProperties.getCustomFields());
                kafkaMessageEncoder.setLayout(layout);
                kafkaMessageEncoder.setContext(loggerContext);
                kafkaMessageEncoder.start();
                kafkaAppender.setTopic(kafkaAppenderProperties.getTopic());
                kafkaAppender.setEncoder(kafkaMessageEncoder);
                kafkaAppender.setContext(loggerContext);
                kafkaAppender.start();
                logger.addAppender(kafkaAppender);
                if (loggerd!=null){
                    loggerd.addAppender(kafkaAppender);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return logger;
    }


}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy