log42.xml не поднимается при запуске теста JMH из тестового каталога - PullRequest
0 голосов
/ 04 мая 2018

У меня есть задача Gradle для запуска теста JMH:

task benchmark(type: JavaExec) {
    dependsOn compileTestJava
    classpath = sourceSets.test.runtimeClasspath
    main = "com.example.Benchmark"
}

Benchmark - это просто точка входа в JMH, расположенная по адресу src\test\java\com\example (написано на Kotlin, но здесь это не должно иметь значения):

object Benchmark {

    @JvmStatic
    fun main(args: Array<String>) {        
        org.openjdk.jmh.Main.main(args)
    }
}

Чтобы не искажать мой тест, я хочу запретить вход в консоль. Поэтому я создал log4j2.xml файл конфигурации под src\test\resources.

В моем log42.xml я закомментировал каждую ссылку на консольный аппендер и даже закомментировал сам аппендер. Но я все еще получаю сообщения журнала на консоли, что означает, что моя конфигурация Log4j не эффективна, и вместо нее используется конфигурация по умолчанию. Это запасной вариант Log4j .

Если я добавлю следующий блок к описанному выше методу main, все будет в порядке:

val log4Url = javaClass.classLoader.getResource("log4j2.xml")
val log4JConfigPath = Paths.get(log4Url.toURI())
println("classpath: " + log4JConfigPath.toAbsolutePath())

log4j2.xml существует там, где я ожидаю (build\resources\test\log4j2.xml). Поведение совпадает с именем файла log4j2-test-xml). Файл конфигурации из src\main\resources также игнорируется.

Я использую Gradle 4.7, если это имеет какое-либо отношение.

Что мне нужно сделать, чтобы Log4j использовал файл конфигурации из моего каталога тестовых ресурсов?

1 Ответ

0 голосов
/ 07 мая 2018

Эта проблема является побочным эффектом неправильного управления зависимостями. Тест является частью приложения Spring Boot, и Spring Boot по умолчанию поставляется с Logback Logging. Если вы хотите использовать Log4J вместо этого, вы должны исключить Logback явно. Я так и сделал, но забыл об этом с новой зависимостью, поэтому Logback вернулся.

Исправление состоит в том, чтобы исключить Logback (переданный через spring-boot-starter-logging) раз и навсегда с помощью этой конфигурации Gradle:

configurations.all {
    exclude group: "org.springframework.boot", module: "spring-boot-starter-logging"
} 
...