Как изменить уровень ведения журнала maven, чтобы отображать только предупреждения и ошибки?


147

Я хочу, чтобы maven не отображал информационные сообщения, я хочу видеть только ПРЕДУПРЕЖДЕНИЯ и ОШИБКИ (если есть).

Как я могу этого добиться, желательно изменив командную строку, которая вызывает maven?


Соответствующая тема: stackoverflow.com/questions/71069/… . -B, --batch-modeили -qсделаю mvnменее подробным.
Станислав

Ответы:


114

Отвечая на ваш вопрос

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

Параметры подробности командной строки Maven

Согласно http://books.sonatype.com/mvnref-book/reference/running-sect-options.html#running-sect-verbose-option

  • -e для ошибки
  • -X для отладки
  • -q только для ошибки

Файл конфигурации журнала Maven

В настоящее время maven 3.1.x использует SLF4J для входа в System.out. Вы можете изменить настройки ведения журнала в файле:

${MAVEN_HOME}/conf/logging/simplelogger.properties

Согласно странице: http://maven.apache.org/maven-logging.html

Настройка командной строки

Я думаю, вы сможете установить уровень журнала по умолчанию для простого регистратора с помощью параметра командной строки, например:

$ mvn clean package -Dorg.slf4j.simpleLogger.defaultLogLevel=debug

Но я не мог заставить его работать . Я предполагаю, что единственная проблема в том, что maven выбирает уровень по умолчанию из файла конфигурации в пути к классам. Я также попробовал несколько других настроек через System.properties, но все они не увенчались успехом.

Приложение

Вы можете найти исходный код slf4j на github здесь: slf4j github

Источник simplelogger здесь: slf4j / jcl-over-slf4j / src / main / java / org / apache / commons / logging / impl / SimpleLog.java

Загрузчик plexus загружает файлы simplelogger.properties.


2
вы получили simplelogger.propertiesсдачу? Когда я изменяю org.slf4j.simpleLogger.warnLevelStringнастройку, mvn compileобновляется соответствующим образом, но, похоже, она игнорирует org.slf4j.simpleLogger.defaultLogLevelнастройку. Он также регистрирует информацию на уровне информации, даже если я установил предупреждение или ошибку.
Alden

1
@Alden, у меня такое же поведение. его просто игнорируют.
jax 01

18
Для меня оказалось, что добавление "-Dorg.slf4j.simpleLogger.defaultLogLevel = info" в команду сборки не имеет никакого эффекта. Если я определю это перед сборкой в ​​MAVEN_OPTS следующим образом: export "MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel = debug", тогда он будет отлично работать без изменения файла $ {MAVEN_HOME} /conf/logging/simplelogger.properties .
Gábor Lipták

1
Олден, Габор Липтак: и для меня ни один из двух методов не работает. :( Я использую Maven 3.2.5.
Грег Дубицки 05

1
если окна, в файле bat, используйте set MAVEN_OPTS =% MAVEN_OPTS% -Dorg.slf4j.simpleLogger.defaultLogLevel = warn
feilong

44

Linux:

mvn validate clean install | egrep -v "(^\[INFO\])"

или

mvn validate clean install | egrep -v "(^\[INFO\]|^\[DEBUG\])"

Windows:

mvn validate clean install | findstr /V /R "^\[INFO\] ^\[DEBUG\]"

5
но если цель состоит в том, чтобы уменьшить избыточный ввод-вывод во время mvn ... тогда это не совсем так,
HoaPhan

Как мы можем добиться того же на компьютере с Windows, если egrep на нем не работает?
hemanto

что-то вродеmvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
Tom H

Похоже, findstrподдерживает регулярное выражение и другие параметры, которые могут сделать его более лаконичным - ss64.com/nt/findstr.html
Tom H

mvn validate clean install | findstr /V /R "^\[INFO\] ^\[WARN\]"
Tom H

32

Вы можете добиться этого с помощью MAVEN_OPTS, например
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean

Вместо того, чтобы помещать системное свойство непосредственно в командную строку. (По крайней мере, для maven 3.3.1.)

Подумайте об использовании ~/.mavenrcдля настройки, MAVEN_OPTSесли вы хотите, чтобы журнал для вашего входа был изменен для всех вызовов maven.


2
Кажется, это работает, так как я мог отключить предупреждение и информационное сообщение, установив уровень на ошибку, но, к сожалению, он также отключил обычный вывод. На самом деле я пытался отключить некоторые предупреждения во время запуска help:evaluatetarget для вывода значения, project.versionи этот вывод (хотя, похоже, не проходит slf4j) также был отключен.
haridsv

Единственный ответ, который работает без постоянного вмешательства в установку Maven. Еще одна причина, по которой Maven - динозавр среди систем сборки - он просто не поддерживает требования здравого смысла.
Абхиджит Саркар

18

Если вы используете Logback, просто поместите этот logback-test.xmlфайл в src/test/resourcesкаталог:

<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>
<root level="INFO">
    <appender-ref ref="STDOUT" />
</root>
</configuration>

5

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

 -e for error
-X for debug
-q for only error

например:

mvn test -X -DsomeProperties='SomeValue' [For Debug level Logs]
mvn test -e -DsomeProperties='SomeValue' [For Error level Logs]
mvn test -q -DsomeProperties='SomeValue' [For Only Error Logs]


2

К сожалению, даже с maven 3 единственный способ сделать это - исправить исходный код.

Вот краткая инструкция, как это сделать.

Клонирование или форк репозитория Maven 3: "git clone https://github.com/apache/maven-3.git "

Отредактируйте журнал org.apache.maven.cli.MavenCli # и измените

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );

к

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );

В текущей версии снимка это строка 270.

Затем просто запустите «mvn install», ваш новый дистрибутив maven будет расположен в папке «apache-maven \ target \»

См. Эту разницу для справки: https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131


1
На данный момент этот ответ УСТАРЕЛ - а) URL-адрес репо изменился, б) в этом коде нет инструкции уровня INFO, в) URL-адрес diff не работает.
Грег Дубицки

Не имеет значения, где в коде используется информация - при разработке плагинов ваше моджо должно полагаться на регистратор maven с getLog()- если вы можете жить с возможностью настройки.
Adam

1

Самый простой способ - перейти на Maven 3.3.1 или выше, чтобы воспользоваться ${maven.projectBasedir}/.mvn/jvm.configподдержкой.

Затем вы можете использовать любые параметры из поддержки SimpleLogger SL4FJ от Maven для настройки всех регистраторов или конкретных регистраторов. Например, вот как сделать все предупреждения на warnуровне, за исключением PMD, который настроен для входа в error:

cat .mvn/jvm.config
-Dorg.slf4j.simpleLogger.defaultLogLevel=warn -Dorg.slf4j.simpleLogger.log.net.sourceforge.pmd=error

Смотрите здесь для более подробной информации о регистрации с Maven.


1

Изменение infoк errorв simplelogging.propertiesфайле поможет в достижении ваших требований.

Просто измените значение в строке ниже

org.slf4j.simpleLogger.defaultLogLevel=info 

к

org.slf4j.simpleLogger.defaultLogLevel=error

1

Зайдите simplelogger.propertiesв ${MAVEN_HOME}/conf/logging/и установите следующие свойства:

org.slf4j.simpleLogger.defaultLogLevel=warn
org.slf4j.simpleLogger.log.Sisu=warn
org.slf4j.simpleLogger.warnLevelString=warn

И будьте осторожны: warnнеwarning


0

Я заметил, что при использовании версии 2.20.1 плагина maven sunfire все предупреждения записываются в файл дампа. например/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.