Как использовать несколько регистраторов в качестве карты. (Карта регистраторов не работает должным образом) - PullRequest
0 голосов
/ 13 февраля 2020

Я создал компонент карты с несколькими регистраторами и возвращаю карту регистраторов. Когда я пытаюсь что-то записать, используя один из регистраторов на карте, он всегда записывает в журнал по умолчанию.

Ниже приведены мои программы 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 файл. Какие причины могут быть затронуты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...