Como alterar o nível de registro de maven para exibir apenas avisos e erros?

142

Quero impedir que o maven exiba mensagens INFO, quero ver apenas AVISOS e ERROS (se houver).

Como conseguir isso, de preferência alterando a linha de comando que chama de maven?

sorin
fonte
Tópico relevante: stackoverflow.com/questions/71069/… . -B, --batch-modeou -qtornará mvnmenos detalhado.
Stanislav

Respostas:

108

Respondendo sua pergunta

Fiz uma pequena investigação porque também estou interessado na solução.

Opções de verbosidade da linha de comando do Maven

De acordo com http://books.sonatype.com/mvnref-book/reference/running-sect-options.html#running-sect-verbose-option

  • -e por erro
  • -X para depuração
  • -q apenas para erro

Arquivo de configuração de log do Maven

Atualmente o maven 3.1.x usa o SLF4J para fazer logon no System.out. Você pode modificar as configurações de log no arquivo:

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

De acordo com a página: http://maven.apache.org/maven-logging.html

Configuração da linha de comando

Eu acho que você deve ser capaz de configurar o nível de log padrão do logger simples por meio de um parâmetro de linha de comando, assim:

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

Mas não consegui fazê-lo funcionar . Eu acho que o único problema é que o maven pega o nível padrão no arquivo de configuração no caminho de classe. Também tentei algumas outras configurações via System.properties, mas todas elas não tiveram êxito.

Apêndice

Você pode encontrar a fonte do slf4j no github aqui: slf4j github

A fonte do simplelogger aqui: slf4j / jcl-over-slf4j / src / main / java / org / apache / commons / log / impl / SimpleLog.java

O carregador de plexo carrega o simplelogger.properties.

kisp
fonte
2
você conseguiu que a simplelogger.propertiesmudança funcionasse? Quando altero a org.slf4j.simpleLogger.warnLevelStringconfiguração, mvn compileatualizo-a adequadamente, mas parece estar ignorando a org.slf4j.simpleLogger.defaultLogLevelconfiguração. Ele também registra no nível de informações, mesmo quando eu defino isso como aviso ou erro.
Alden
1
@ Olden, estou recebendo o mesmo comportamento. é simplesmente ignorado.
Jax1
18
Para mim, verificou-se que adicionar "-Dorg.slf4j.simpleLogger.defaultLogLevel = info" ao comando build não tem nenhum efeito. Se eu definir isso antes da compilação no MAVEN_OPTS desta forma: exporte "MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel = debug", funcionará perfeitamente sem alterar o arquivo $ {MAVEN_HOME} /conf/logging/simplelogger.properties .
Gábor Lipták
1
Alden, Gábor Lipták: e para mim nenhum dos dois métodos funciona. :( Estou usando o Maven 3.2.5.
Greg Dubicki 5/15/15
1
Se o Windows, no arquivo bat, o uso conjunto MAVEN_OPTS =% MAVEN_OPTS% -Dorg.slf4j.simpleLogger.defaultLogLevel = avisar
Feilong
45

Linux:

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

ou

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

Janelas:

mvn validate clean install | findstr /V /R "^\[INFO\] ^\[DEBUG\]"
Tom H
fonte
5
mas se o ponto é reduzir o IO redundante durante mvn ... então não é realmente faz o truque
HoaPhan
Como podemos conseguir o mesmo na máquina Windows, pois o egrep não funciona?
hemanto 14/09
algo parecido commvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
Tom H
Looks como findstrsuportes regex e outras opções que podem torná-lo mais sucinta - ss64.com/nt/findstr.html
Tom H
mvn validate clean install | findstr /V /R "^\[INFO\] ^\[WARN\]"
Tom H
32

Você pode conseguir isso com MAVEN_OPTS, por exemplo
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean

Em vez de colocar a propriedade do sistema diretamente na linha de comando. (Pelo menos para o maven 3.3.1.)

Considere usar a opção ~/.mavenrcpara definir MAVEN_OPTSse você deseja alterar o registro para o seu login em todas as chamadas invocadas.

Binkley
fonte
2
Isso parece funcionar, pois eu poderia desativar o aviso e a mensagem informativa definindo o nível como erro, mas infelizmente também desativou a saída regular. Na verdade, eu estava tentando desativar alguns avisos enquanto executava o help:evaluatealvo para imprimir o valor de project.versione essa saída (embora não pareça ocorrer slf4j) também foi desativada.
haridsv
A única resposta que funciona sem interferir permanentemente na instalação do Maven. Outro motivo pelo qual o Maven é um dinossauro entre o sistema de compilação - ele simplesmente não suporta requisitos de bom senso.
Abhijit Sarkar
16

Se você estiver usando o Logback, basta colocar este logback-test.xmlarquivo no src/test/resourcesdiretório:

<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>
Pawel Wrzeszcz
fonte
3

você pode conseguir isso usando abaixo na própria linha de comando

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

por exemplo :

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]

MD AFSAR ALI
fonte
2

Infelizmente, mesmo com o maven 3, a única maneira de fazer isso é corrigir o código-fonte.

Aqui está uma breve instrução de como fazer isso.

Clone ou fork do repositório do Maven 3: "git clone https://github.com/apache/maven-3.git "

Edite o registro org.apache.maven.cli.MavenCli # e altere

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );

para

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );

Na versão atual do instantâneo, está na linha 270

Em seguida, basta executar "mvn install", sua nova distribuição maven estará localizada na pasta "apache-maven \ target \"

Veja este diff para a referência: https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131

Dmitry Sidorenko
fonte
1
Esta resposta está obsoleta a partir de agora - a) URL do repositório alterado, b) não há nenhuma declaração de nível INFO neste código, c) o URL do diff não funciona.
Greg Dubicki
Não importa onde o código usa INFO - ao desenvolver plugins, seu mojo deve confiar no maven logger com getLog()- se você puder viver com a configurabilidade.
Adam
1

A maneira mais simples é atualizar para o Maven 3.3.1 ou superior para aproveitar o ${maven.projectBasedir}/.mvn/jvm.configsuporte.

Em seguida, você pode usar qualquer opção do suporte ao SimpleLogger do SL4FJ do Maven para configurar todos os registradores ou registradores específicos. Por exemplo, aqui está um exemplo de como fazer todos os avisos no warnnível, exceto um PMD que está configurado para registrar em error:

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

Veja aqui para mais detalhes sobre o registro no Maven.

btiernay
fonte
1

Alterar o infoque errorno simplelogging.propertiesarquivo irá ajudar a alcançar sua exigência.

Basta alterar o valor da linha abaixo

org.slf4j.simpleLogger.defaultLogLevel=info 

para

org.slf4j.simpleLogger.defaultLogLevel=error
Sumith08
fonte
0

Notei que ao usar a versão 2.20.1 do plug-in maven sunfire , todos os avisos são gravados em um arquivo dumpstream. por exemplo/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream

Hakan
fonte
0

Ir para simplelogger.propertiesem ${MAVEN_HOME}/conf/logging/e defina as seguintes propriedades:

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

E cuidado:, warnnãowarning

Gangnus
fonte