Я пытаюсь захватить журналы распределения 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 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? Спасибо
Я думаю, вы используете разные контексты
Если вы используете статические регистраторы в вашем Класс под тестом, вы можете использовать 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-компонентов.
почему бы не использовать
spring-logback.xmlдля весеннего профилированного аппендера? Создайте профиль только для теста.