Я пробовал использовать отражение, но в моем случае sl4fj создает окончательный регистратор. Это значит, что я не могу его настроить.
Любой совет?
если вы используете log4j2 с пружинной загрузкой, вы можете сделать следующее:
тестовый код:
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import static org.assertj.core.api.Assertions.assertThat;
@ExtendWith(OutputCaptureExtension.class)
class MyClassTest {
@Test
void myFunction_whenIDoAThing_thenItDoesNotLog(CapturedOutput output) {
// given
...
// when
when(myDependency.doSomething()).thenReturn(something);
myClass.doSomething();
// then
assertThat(output).doesNotContain(AN_EXPECTED_ERROR_MESSAGE);
verify(myDependency).doSomething();
}
}
ключом является добавление атрибута Follow и отправка журналов в систему
https://docs.spring.io/spring-boot/api/java/org/springframework/boot/test/system/OutputCaptureExtension.htmlhttps://logging.apache.org/log4j/2.x/manual/appenders.html#ConsoleAppender
конфигурация log4j2:
❯ cat spring-rest/src/test/resources/log4j2-test.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<Configuration status = "warn">
<Appenders>
<Console name = "STDOUT" target = "SYSTEM_OUT" follow = "true">
<PatternLayout pattern = "%m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level = "warn">
<AppenderRef ref = "STDOUT"/>
</Root>
</Loggers>
</Configuration>