logback-kafka-appender icon indicating copy to clipboard operation
logback-kafka-appender copied to clipboard

Can't make kafka appender work with programmatical config

Open astsiatsko opened this issue 3 years ago • 0 comments

I want this appender to work without xml config and be accessible from any part of code like

Logger l = KafkaLoggerFactory.getLogger(MyClass.class);

I did it this way: `public static Logger getLogger(String string) {

    Logger logger = (Logger) LoggerFactory.getLogger(string);

   ExtendedJsonLayout layout = new ExtendedJsonLayout();

    JacksonJsonFormatter jErrFormatter = new JacksonJsonFormatter();
    jErrFormatter.setPrettyPrint(true);
    layout.setJsonFormatter(jErrFormatter);
    layout.setTimestampFormat(TIMESTAMP_FORMAT);
    layout.setIncludeContextName(false);

    Appender a = composeKafkaAppender();

    logger.addAppender(a);
    logger.setLevel(DEBUG);
    logger.setAdditive(false); /* set to true if root should log too */

    return logger;
}

private static KafkaAppender composeKafkaAppender(){
    KafkaAppender kafkaAppender = new KafkaAppender();
    LoggingEventCompositeJsonEncoder encoder = new LoggingEventCompositeJsonEncoder();

    LoggingEventJsonProviders providers = new LoggingEventJsonProviders();
    LoggingEventPatternJsonProvider patternJsonProvider = new LoggingEventPatternJsonProvider();
    patternJsonProvider.setPattern("{\"aplication\":\"My domain service11\",\"date\":\"%d{yyyy-MM-dd HH:mm:ss.SSS}\"," +
            "\"level\":\"%-5level\",\"logger\":\"%logger{36}\",\"msg\":\"%msg\"}");
    providers.addPattern(patternJsonProvider);
    encoder.setProviders(providers);

    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();

    kafkaAppender.setName("name111");
    kafkaAppender.setTopic("myTopic");
    kafkaAppender.setEncoder(encoder);
    kafkaAppender.setContext(lc);
    kafkaAppender.setKeyingStrategy(new NoKeyKeyingStrategy());
    kafkaAppender.setDeliveryStrategy(new AsynchronousDeliveryStrategy());
    //kafkaAppender.addAppender(appender);
    kafkaAppender.addProducerConfig("bootstrap.servers=myserver:9092");
    kafkaAppender.start();
    return kafkaAppender;
}`

Please help me how to do that and why this config does not work. I can't see any data in kafka

astsiatsko avatar Feb 06 '22 14:02 astsiatsko