경고 및 오류 만 표시하도록 Maven 로깅 수준을 변경하는 방법은 무엇입니까?


142

maven이 INFO 메시지를 표시하지 못하게하고 경고 및 오류 (있는 경우) 만보 고 싶습니다.

maven을 호출하는 명령 줄을 변경하여 어떻게 이것을 달성 할 수 있습니까?


관련 주제 : stackoverflow.com/questions/71069/... . -B, --batch-mode또는 -q만들 것이다 mvn덜 장황.
Stanislav

답변:


108

질문에 답변

나는 또한 솔루션에 관심이 있기 때문에 작은 조사를했습니다.

메이븐 명령 행 상세 옵션

http://books.sonatype.com/mvnref-book/reference/running-sect-options.html#running-sect-verbose-option 에 따르면

  • 오류의 경우 -e
  • 디버그 용 -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이 클래스 경로의 구성 파일에서 기본 수준을 선택한다는 것입니다. 또한 System.properties를 통해 몇 가지 다른 설정을 시도했지만 모두 실패했습니다.

부록

github에서 slf4j의 소스를 찾을 수 있습니다 : 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. 경고 또는 오류로 설정 한 경우에도 정보 수준으로 기록됩니다.
Alden

1
@Alden, 나는 같은 행동을하고있다. 단순히 무시됩니다.
jax

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
Alden, Gábor Lipták : 저에게는 두 가지 방법 중 어느 것도 효과가 없습니다. :( Maven 3.2.5를 사용하고 있습니다.
Greg Dubicki

1
박쥐 파일에서 Windows가 설정된 경우 MAVEN_OPTS = % MAVEN_OPTS % -Dorg.slf4j.simpleLogger.defaultLogLevel = warn
feilong을 사용하십시오.

45

리눅스 :

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

또는

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

윈도우 :

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

5
그러나 요점은 mvn 동안 중복 IO를 줄이는 것이라면 ... 실제로 트릭을 수행하지는 않습니다.
HoaPhan

egrep이 작동하지 않는 Windows 시스템에서 어떻게 동일한 결과를 얻을 수 있습니까?
hemanto

뭔가 같은mvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
톰 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의 경우)

모든 Maven 호출에서 로그인에 대한 로깅을 변경하려면 ~/.mavenrc설정에 사용 MAVEN_OPTS하십시오.


2
수준을 오류로 설정하여 경고 및 정보 메시지를 비활성화 할 수 있기 때문에 작동하지만 불행히도 일반 출력도 해제했습니다. 실제로 help:evaluate값을 인쇄하기 위해 대상을 실행하는 동안 일부 경고를 비활성화하려고 project.version했지만이 출력 (통과하지는 않지만 slf4j)도 꺼졌습니다.
haridsv

Maven 설치를 영구적으로 망칠 필요없이 작동하는 유일한 대답입니다. Maven이 빌드 시스템 중 공룡 인 또 다른 이유는 상식 요구 사항을 지원하지 않습니다.
Abhijit Sarkar

16

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>

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 저장소 : "git clone https://github.com/apache/maven-3.git "

org.apache.maven.cli.MavenCli # logging을 편집하고 변경하십시오.

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );

현재 스냅 샷 버전에서는 270 행입니다.

그런 다음 "mvn install"을 실행하면 새 maven 배포판이 "apache-maven \ target \"폴더에 있습니다.

참조를 위해이 diff를 참조하십시오 : https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131


1
이 답변은 현재 OBSOLETE입니다-a) repo URL이 변경되었습니다. b)이 코드에 INFO 레벨 명령문이 없습니다. c) diff URL이 작동하지 않습니다.
Greg Dubicki

코드가 INFO를 사용하는 위치는 중요하지 않습니다-플러그인을 개발할 때 getLog()구성 가능성을 살 수 있다면 mojo는 maven 로거에 의존해야 합니다.
Adam

1

가장 간단한 방법은 Maven 3.3.1 이상 으로 업그레이드 하여 ${maven.projectBasedir}/.mvn/jvm.config지원 을 이용하는 것입니다 .

그런 다음 Maven SL4FJ의 SimpleLogger 지원 옵션을 사용 하여 모든 로거 또는 특정 로거를 구성 할 수 있습니다 . 예를 들어, 다음 warn에 로그인하도록 구성된 PMD를 제외한 모든 수준의 모든 경고를 만드는 방법 은 error다음 과 같습니다.

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

Maven으로 로깅에 대한 자세한 내용 은 여기 를 참조 하십시오 .


1

에서 파일 info을 변경하면 요구 사항을 달성하는 데 도움이됩니다.errorsimplelogging.properties

아래 줄의 값을 변경하십시오.

org.slf4j.simpleLogger.defaultLogLevel=info 

org.slf4j.simpleLogger.defaultLogLevel=error

0

2.20.1 버전의 maven sunfire plugin 사용 하면 모든 경고가 덤프 스트림 파일에 기록됩니다. 예 :/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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.