Как установить уровень журнала на DEBUG во время тестов Junit?
Я использую SLF4J с LOG4J, и конфигурации обычно находятся в log4j.properties
, и он устанавливает уровень журнала в INFO.
Однако во время тестов я хотел бы установить журналы в DEBUG.
Я не могу найти способ автоматизировать это, ни иметь что-то вроде log4j.tests.properties
которое было бы загружено только во время тестов.
Поэтому я попытался сделать это программно в тестовой настройке (@BeforeClass):
LogManager.getRootLogger().setLevel(Level.ALL);
Без успеха...
Я использую эти версии:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
Как я могу достичь этого результата?
EDIT: Я думаю, что я был недостаточно ясен. Этот вопрос заключается не в настройке правильного уровня журнала... Это касается установки уровня журнала DEBUG при запуске тестов Junit и установки уровня журнала INFO в любой другой ситуации. Я хочу автоматизировать это.
Ответы
Ответ 1
Вам не нужно предоставлять JVM другую реализацию журнала.
Код регистрации выполняет log4j.properties
файла log4j.properties
с помощью пути к классам. Итак, все, что вам нужно сделать, это убедиться, что файл test log4j.properties
находится в том месте, которое оно найдет перед файлом релиза.
Я использую Maven, который издает файлы в каталогах, чтобы сделать это легко. Мой выпуск log4j.properties
отправляется в каталог src/main/resources
. Моя тестовая версия входит в src/test/resources
. Путь сборки Eclipse (путь к классам) настроен на поиск src/test/resources
до src/main/resources
, поэтому ваши модульные тесты используют тестовый файл. Инструкции сборки JAR (или WAR) используют файлы из src/main/resources
.
Ответ 2
Обычно LEVEL.FINEST должен это делать... но посмотрите на http://saltnlight5.blogspot.mx/2013/08/how-to-configure-slf4j-with-different.html, чтобы увидеть, как осуществляется сборка кадровых решений.
Ответ 3
Вы можете использовать org.apache.logging.log4j.core.config.Configurator
, у которого есть метод setAllLevels
.
В своем тесте вы можете использовать его в методе @Before
:
@Before
public void changeLogLevel() {
Configurator.setAllLevels("", Level.ALL);
}
ПРИМЕЧАНИЕ: протестировано с привязкой org.slf4j: slf4j-log4j12: 1.7.26
Ответ 4
Изменение уровня журнала ниже ROOT будет работать для junit, чтобы установить запись на желаемый уровень.
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
@Before
public void setUp() {
final Logger logger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
logger.setLevel(Level.ALL);
}