logback-kafka-appender
logback-kafka-appender copied to clipboard
Can't make kafka appender work with programmatical config
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