Записывать журналы в тесте

Я пытаюсь захватить журналы распределения bean-компонентов в тесте - у меня есть код, который я тестировал, и я успешно захватываю журналы из классов мой - но когда я пытаюсь сделать это в весенних классах, он, похоже, не работает - здесь это код, который я использую, чтобы попытаться захватить:

    LoggerContext context = (LoggerContext) (LoggerFactory.getILoggerFactory());
    Logger log = context.getLogger("org.springframework.beans.factory.support.DefaultListableBeanFactory");
    log.setLevel(Level.DEBUG);
    MyAppender appender = new MyAppender();
    appender.setContext( context);
    log.addAppender( appender  );
    SpringApplication newApplication = new SpringApplication( Application.class);
    newApplication.run( new String [] {});

Теперь, если я прослежу и посмотрю на регистратор, который использует Spring - он выглядит как совершенно другой стиль регистратора - (он подключен к logmanager, а не к loggercontext) - и перейду к нему, и кажется, что это может быть другой контекст?

Есть идеи, что я делаю неправильно, и как я могу в модульном тесте записывать журналы создания Spring bean?

почему бы не использовать spring-logback.xml для весеннего профилированного аппендера? Создайте профиль только для теста.

Downhillski 09.11.2018 04:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
323
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Spring boot по умолчанию использует Logback logger Он использует реализацию LogbackLoggingSystem, которая расширяется от AbstractLoggingSystem Система ведения журнала загрузки Spring запускается до инициализации контекста Чтобы переопределить свойства по умолчанию, вы можете определить logback.xml или logback-spring.xml. Или вы можете использовать application.yml или файл свойств для определения конфигураций журнала:

logging.level. *: используется как префикс с именем пакета для установки уровня журнала. logging.file: настраивает имя файла журнала для записи сообщения в файл. Мы также можем настроить имя файла с абсолютным путем. logging.path: настраивает только путь для файла журнала. Spring boot создает файл журнала с именем spring.log logging.pattern.console: определяет шаблон ведения журнала в консоли. logging.pattern.file: определяет шаблон регистрации в файле. logging.pattern.level: определяет формат отображения уровня журнала. По умолчанию% 5p.

Как говорится в документации: Вы можете заставить Spring Boot использовать определенную систему ведения журнала с помощью системного свойства org.springframework.boot.logging.LoggingSystem. Значение должно быть полным именем класса реализации LoggingSystem. Вы также можете полностью отключить конфигурацию ведения журнала Spring Boot, указав значение none.

спасибо - как уже упоминалось, я пытаюсь сделать все это в модульном тесте и абсолютно не хочу никакого риска изменения поведения приложения, поэтому свойства конфигурации отсутствуют. Кроме того, как вы видите выше, я настраиваю приложение входа в систему - так что есть идеи, почему я не собираю информацию о Springboot? Спасибо

Darren Oakey 09.11.2018 03:42

Я думаю, вы используете разные контексты

Mykhailo Moskura 28.11.2018 03:05

Если вы используете статические регистраторы в вашем Класс под тестом, вы можете использовать Powermock для имитации регистратора и утверждения вывода, как описано в этом вопросе. Мы используем его в наших Spring-тестах, форматирование и стиль такие же.

Ответ принят как подходящий

для всех, кого это интересует - это, наконец, сработало для меня:

Logger logger = Logger.getLogger(
        "org.springframework.beans.factory.support.DefaultListableBeanFactory");
logger.addHandler( this );
logger.setLevel( java.util.logging.Level.FINE);
_logger = logger;

теперь я могу фиксировать, отслеживать и измерять время для всех распределений bean-компонентов.

Другие вопросы по теме