2016-02-11 5 views
1

Я знаю, как установить уровень журнала через environment variables и application properties.Как программно установить уровни регистрации Spring Boot?

Есть ли способ установить их программно?

Я хотел бы установить уровни журналов для определенных классов тестов (которые используют SpringJUnit4ClassRunner и @SpringApplicationConfiguration), но не все из них и без отдельного файла свойств для каждой комбинации.

Я пробовал defining a non-lazy bean to add a new PropertySource to the environment; метод был вызван, но он не имел никакого эффекта.

@Bean 
@Lazy(false) 
public PropertySource testProperties(ConfigurableEnvironment environment) { 
    PropertySource properties = new MapPropertySource("testProperties", Collections.singletonMap(
     "logging.level.org.springframework.security", "DEBUG" 
)); 

    environment.getPropertySources().addFirst(properties); 
    return properties; 
} 
+0

Единственный способ я знаю, настроенных уровней протоколирования когда регистратор был запущен осуществляется через JMX ... –

+0

@BoristheSpider Это доступно только для 'java.util.logging', который не используется пружиной. – OrangeDog

+0

Не верно по обоим пунктам - Logback и Log4j2 поддерживают JMX и Spring Boot поддерживает JUL, если вы этого хотите (но почему, черт возьми, вы бы ...). Вам просто нужно настроить JMX-коннектор в файле конфигурации. Вы не говорите, в какую среду вы загрузили Boot. –

ответ

5

Вы можете использовать @TestPropertySource на своих тестовых классах. В отличие от используемого вами метода, основанного на компонентах, @TestPropertySource добавит источник свойств в среду до начала контекста, который позволяет получать свойства при инициализации системы ведения журнала.

Что-то вроде этого:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(YourApplication.class) 
@TestPropertySource(properties = "logging.level.org.springframework.security:DEBUG") 
public class YourApplicationTests { 
    // … 
} 
1

Кредит Boris the Spider за подсказку.

Сначала добавьте элемент <jmxConfigurator /> в logback.xml.

Затем, этот код будет работать:

@Before 
public void configureLogging() throws JMException { 
    ObjectName name = new ObjectName(String.format("ch.qos.logback.classic:Name=default,Type=%s", JMXConfigurator.class.getName())); 
    JMXConfiguratorMBean logbackMBean = JMX.newMBeanProxy(ManagementFactory.getPlatformMBeanServer(), name, JMXConfiguratorMBean.class); 
    logbackMBean.setLoggerLevel("org.springframework.security", "DEBUG"); 
} 

К сожалению, там не кажется, лучший способ создать имя объекта: Package иерархия не проходимой и строка «по умолчанию» ISN Я не могу найти нигде.

+0

Я действительно должен был подумать об одном из них: http://stackoverflow.com/q/7967165/476716 – OrangeDog

Смежные вопросы