Як змінити рівень реєстрації Maven, щоб відображати лише попередження та помилки?


142

Я хочу не допустити, щоб Maven відображав INFO-повідомлення, я хочу бачити лише ПОПЕРЕДЖЕННЯ та ПОМИЛКИ (якщо такі є).

Як я можу досягти цього, бажано, змінивши командний рядок, який викликає maven?


Відповідна тема: stackoverflow.com/questions/71069 / ... . -B, --batch-modeабо -qзробить mvnменш багатослівним.
Станіслав

Відповіді:


108

Відповідаючи на ваше запитання

Я провів невелике розслідування, тому що мене також цікавить рішення.

Параметри багатослівності командного рядка Maven

Відповідно до http://books.sonatype.com/mvnref-book/reference/running-sect-options.html#running-sect-verbose-option

  • -е за помилку
  • -X для налагодження
  • -q лише помилка

Налаштований конфігураційний файл журналу

В даний час 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 підбирає рівень за замовчуванням з конфігураційного файлу на classpath. Я також спробував пару інших налаштувань через System.properties, але всі вони не вдалися.

Додаток

Ви можете знайти джерело slf4j на github тут: slf4j github

Джерело Simplelogger тут: slf4j / jcl-over-slf4j / src / main / java / org / apache / commons / logging / impl / SimpleLog.java

Навантажувач сплетення завантажує simplelogger.properties.


2
чи simplelogger.propertiesзмінили ви роботу? Коли я змінюю org.slf4j.simpleLogger.warnLevelStringналаштування mvn compileоновлення належним чином, але, здається, він ігнорує org.slf4j.simpleLogger.defaultLogLevelналаштування. Він також реєструється на рівні інформації, навіть коли я встановлюю це попередження або помилку.
Алден

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

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

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

1
якщо windows, у файлі bat, використовуйте set MAVEN_OPTS =% MAVEN_OPTS% -Dorg.slf4j.simpleLogger.defaultLogLevel = попереджаю
feilong

45

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
але якщо справа в тому, щоб зменшити надлишковий IO під час mvn ... тоді це насправді не робиться хитрість
HoaPhan

Як ми можемо досягти того ж на машині Windows, оскільки egrep не працює на ньому?
геманто

щось на кшталтmvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
Том Н

Схоже, findstrпідтримує регулярний вираз та інші параметри, які можуть зробити його більш лаконічним - ss64.com/nt/findstr.html
Tom H

mvn validate clean install | findstr /V /R "^\[INFO\] ^\[WARN\]"
Том Н

32

Домогтися цього можна, наприклад, MAVEN_OPTS
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean

Замість того, щоб розміщувати властивість системи безпосередньо в командному рядку. (Принаймні для Maven 3.3.1.)

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


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

Єдина відповідь, що працює без постійного возитися з установкою Maven. Ще одна причина Maven - динозавр серед системи збирання - він просто не підтримує вимоги здорового глузду.
Abhijit Sarkar

16

Якщо ви використовуєте Зворотний зв'язок, просто покладіть цей 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>

3

ви можете досягти цього, використовуючи нижче в самому командному рядку

 -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 repo: "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
Ця відповідь є ЗАБЕЗПЕЧЕНОМ на сьогодні - a) URL-адреса repo змінилася; б) в цьому коді немає заяви про рівень INFO; в) різний URL-адреса не працює.
Грег Дубіцький

Неважливо, де в коді використовується INFO - при розробці плагінів ваш mojo повинен покладатися на Maven logger з getLog()- якщо ви можете жити з налаштуванням.
Адам

1

Найпростіший спосіб - оновити до Maven 3.3.1 або вище, щоб скористатися ${maven.projectBasedir}/.mvn/jvm.configпідтримкою.

Тоді ви можете скористатися будь-якими параметрами з підтримки SimpleLogger Maven SL4FJ для налаштування всіх реєстраторів або окремих реєстраторів. Наприклад, ось як зробити всі попередження на 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

0

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


0

Перейти simplelogger.propertiesв ${MAVEN_HOME}/conf/logging/і встановіть наступні властивості:

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

І будьте обережні:, warnніwarning

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.