Я создал компонент карты с несколькими регистраторами и возвращаю карту регистраторов. Когда я пытаюсь что-то записать, используя один из регистраторов на карте, он всегда записывает в журнал по умолчанию.
Ниже приведены мои программы c класс логгера
public class ProgrammaticLogger {
public Logger getCustomLogger(String fileName, String customLoggerPath) {
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
FileAppender fileAppender = new FileAppender();
fileAppender.setContext(loggerContext);
fileAppender.setName(fileName);
// set the file name
fileAppender.setFile(customLoggerPath + fileName + ".log");
PatternLayoutEncoder encoder = new PatternLayoutEncoder();
encoder.setContext(loggerContext);
encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss,Asia/Colombo}|[%thread]|%-5level|ErrorMessage: %msg%n");
encoder.start();
fileAppender.setEncoder(encoder);
fileAppender.start();
// attach the rolling file appender to the logger of your choice
Logger logbackLogger = loggerContext.getLogger(fileName);
logbackLogger.addAppender(fileAppender);
return logbackLogger;
}
}
Ниже приводится мой Бин
В моем бине Я получаю имена и путь регистратора из файла свойств.
@Bean(name = "customLoggerBean")
public CustomLoggerMap generateLoggersList() {
String womKafkaTopics = env.getProperty("wom.kafka.topics");
String loggerPath = env.getProperty("custom.logger.path");
String [] splitedKafka= womKafkaTopics.split(",");
CustomLoggerMap customLoggerMap = new CustomLoggerMap();
ProgrammaticLogger programmaticLogger = new ProgrammaticLogger();
for (String topic : splitedKafka) {
String customLoggerPath = loggerPath+topic+"/";
Logger loggerCustome = programmaticLogger.getCustomLogger(topic,customLoggerPath);
loggerCustome.info("Logging Started"+topic);
customLoggerMap.getLoggerMap().put(topic, loggerCustome);
}
return customLoggerMap;
}
Это мой класс утилит
@Component("customLoggerMap")
@Getter
@Setter
public class CustomLoggerMap {
Map<String,Logger> loggerMap = new HashMap<>();
}
И, наконец, это метод I Я собираюсь использовать логгеры
public void onFailure(Throwable ex) {
Map<String,Object> jsonString = new HashMap<>();
try {
jsonString = mapper.readValue(message,Map.class);
} catch (IOException e) {
//log.error("Object Mapping error");
}
String topic = (String) jsonString.get("topic");
Logger loggers = customLoggerMap.getLoggerMap().get(topic);
loggers.info(message); //this is the line where problem occure
//log.error("Error when publishing {}", ex.getMessage());
}
Поскольку вышеприведенное кодовое сообщение необходимо записать в указанный c журнал. Но он записывается в журнал по умолчанию, где я настроил, используя logback. xml файл. Какие причины могут быть затронуты.