SpringBootTest и MockMvc создают огромное количество журналов консоли — как отключить?

Мы используем @SpringBootTest с атрибутом @Autowired private MockMvc mockMvc для имитации HTTP-запросов к нашим классам контроллеров.

По какой-то причине, которую мы не можем определить, это создает огромное количество журналов для каждого тестового примера и заполняет наши журналы тысячи строк текста, которые выглядят так:

build   18-May-2019 03:09:40    Async:
build   18-May-2019 03:09:40        Async started = false
build   18-May-2019 03:09:40         Async result = null
build   18-May-2019 03:09:40    
build   18-May-2019 03:09:40    Resolved Exception:
build   18-May-2019 03:09:40                 Type = null
build   18-May-2019 03:09:40    
build   18-May-2019 03:09:40    ModelAndView:
build   18-May-2019 03:09:40            View name = null
build   18-May-2019 03:09:40                 View = null
build   18-May-2019 03:09:40                Model = null
build   18-May-2019 03:09:40    
build   18-May-2019 03:09:40    FlashMap:
build   18-May-2019 03:09:40           Attributes = null
build   18-May-2019 03:09:40    
build   18-May-2019 03:09:40    MockHttpServletResponse:
build   18-May-2019 03:09:40               Status = 200
build   18-May-2019 03:09:40        Error message = null
build   18-May-2019 03:09:40              Headers = {X-Content-Type-Options=[nosniff], X-XSS-Protection=[1; mode=block], Cache-Control=[no-cache, no-store, max-age=0, must-revalidate], Pragma=[no-cache], Expires=[0], X-Frame-Options=[DENY]}
build   18-May-2019 03:09:40         Content type = null
build   18-May-2019 03:09:40                 Body = 
build   18-May-2019 03:09:40        Forwarded URL = null
build   18-May-2019 03:09:40       Redirected URL = null
build   18-May-2019 03:09:40              Cookies = []
build   18-May-2019 03:09:40    
build   18-May-2019 03:09:40    MockHttpServletRequest:
build   18-May-2019 03:09:40          HTTP Method = POST
build   18-May-2019 03:09:40          Request URI = /api/v1/certification/applications
build   18-May-2019 03:09:40           Parameters = {}
build   18-May-2019 03:09:40              Headers = {Content-Type=[application/json;charset=UTF-8]}
build   18-May-2019 03:09:40                 Body = {"applicationVersion":"1.0"}
build   18-May-2019 03:09:40        Session Attrs = {}
build   18-May-2019 03:09:40    
build   18-May-2019 03:09:40    Handler:
build   18-May-2019 03:09:40                 Type = <redacted>
build   18-May-2019 03:09:40               Method = <redacted>
build   18-May-2019 03:09:40    
build   18-May-2019 03:09:40    Async:
build   18-May-2019 03:09:40        Async started = false
build   18-May-2019 03:09:40         Async result = null
build   18-May-2019 03:09:40    
build   18-May-2019 03:09:40    Resolved Exception:
build   18-May-2019 03:09:40                 Type = null
build   18-May-2019 03:09:40    
build   18-May-2019 03:09:40    ModelAndView:
build   18-May-2019 03:09:40            View name = null
build   18-May-2019 03:09:40                 View = null
build   18-May-2019 03:09:40                Model = null
build   18-May-2019 03:09:40    
build   18-May-2019 03:09:40    FlashMap:
build   18-May-2019 03:09:40           Attributes = null
build   18-May-2019 03:09:40    
build   18-May-2019 03:09:40    MockHttpServletResponse:
build   18-May-2019 03:09:40               Status = 200
build   18-May-2019 03:09:40        Error message = null
build   18-May-2019 03:09:40              Headers = {X-Content-Type-Options=[nosniff], X-XSS-Protection=[1; mode=block], Cache-Control=[no-cache, no-store, max-age=0, must-revalidate], Pragma=[no-cache], Expires=[0], X-Frame-Options=[DENY]}
build   18-May-2019 03:09:40         Content type = null
build   18-May-2019 03:09:40                 Body = 
build   18-May-2019 03:09:40        Forwarded URL = null
build   18-May-2019 03:09:40       Redirected URL = null
build   18-May-2019 03:09:40              Cookies = []

Весь мой поиск в Интернете и чтение документации Spring Boot Test оказались бесплодными. Где этот лог, и как мы можем его отключить?

Мы тщательно отсканировали наш код и уверены, что не печатаем и не несем за него ответственности.

У вас есть файл logback.xml в вашем проекте?

Sambit 18.05.2019 16:16

@Sambit Нет, нигде в нашем проекте нет logback.xml (мы используем SLF4j с Log4j2), и mvn dependency:tree нашего проекта также не указывает никаких зависимостей журнала — прямых или транзитивных.

Craig Otis 18.05.2019 20:08

Если вы используете log4j2, в xml вы можете отключить ведение журнала из определенного пакета.

Sambit 18.05.2019 20:13

Я столкнулся с вашим вопросом, когда работал над аналогичная проблема, который вас также может заинтересовать, то есть тот же результат создается при сбое.

Didier L 24.05.2019 18:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
4
2 808
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны отключить регистратор информации из пакета Spring Framework в application.properties. Добавьте указанное ниже свойство в application.properties.

logging.level.org.springframework=OFF

Это не будет работать, если @AutoConfigureMockMvc не настроен с print = MockMvcPrint.LOG_DEBUG. Более того, вы можете вместо этого отключить только org.springframework.test.web.servlet.result.

Didier L 24.05.2019 18:25
Ответ принят как подходящий

Это исходит от MockMvc.

Может показаться, что вы переопределили значение по умолчанию и указали Spring Boot всегда печатать вывод отладки для MockMvc.

Вы должны иметь возможность деактивировать это, объявив @AutoConfigureMockMvc(printOnlyOnFailure = true) или опустив флаг printOnlyOnFailure, поскольку true является значением по умолчанию.

Вы настраиваете режим вывода с помощью атрибута print, например, @AutoConfigureMockMvc(print = MockMvcPrint.NONE).

Другие вопросы по теме