Làm cách nào để thay đổi cấp ghi nhật ký maven để chỉ hiển thị cảnh báo và lỗi?


142

Tôi muốn ngăn maven hiển thị tin nhắn INFO, tôi chỉ muốn xem CẢNH BÁO và LRI (nếu có).

Làm thế nào tôi có thể đạt được điều này, tốt nhất là bằng cách thay đổi dòng lệnh gọi maven?


Chủ đề liên quan: stackoverflow.com/questions/71069/ . -B, --batch-modehoặc -qsẽ làm cho mvnít dài dòng hơn.
Stanislav

Câu trả lời:


108

Trả lời câu hỏi của bạn

Tôi đã thực hiện một cuộc điều tra nhỏ vì tôi cũng quan tâm đến giải pháp.

Tùy chọn độ dài dòng lệnh Maven

Theo http://books.sonatype.com/mvnref-book/reference/rucky-sect-options.html#rucky-sect-verbose-option

  • -e bị lỗi
  • -X để gỡ lỗi
  • -q chỉ cho lỗi

Tập tin cấu hình đăng nhập Maven

Hiện tại maven 3.1.x sử dụng SLF4J để đăng nhập vào System.out. Bạn có thể sửa đổi cài đặt ghi nhật ký tại tệp:

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

Theo trang: http://maven.apache.org/maven-logging.html

Thiết lập dòng lệnh

Tôi nghĩ bạn sẽ có thể thiết lập mức Nhật ký mặc định của trình ghi nhật ký đơn giản thông qua tham số dòng lệnh, như sau:

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

Nhưng tôi không thể làm cho nó hoạt động . Tôi đoán vấn đề duy nhất với điều này là, maven chọn mức mặc định từ tệp cấu hình trên đường dẫn lớp. Tôi cũng đã thử một vài cài đặt khác thông qua System.properies, nhưng tất cả chúng đều không thành công.

ruột thừa

Bạn có thể tìm thấy nguồn của slf4j trên github tại đây: slf4j github

Nguồn của Simpleelogger ở đây: slf4j / jcl-over-slf4j / src / main / java / org / apache / commons / log / impl / SimpleLog.java

Trình tải plexus tải simplelogger.properties.


2
bạn đã có được sự simplelogger.propertiesthay đổi làm việc? Khi tôi thay đổi org.slf4j.simpleLogger.warnLevelStringcài đặt mvn compilecập nhật một cách thích hợp, nhưng dường như nó đang bỏ qua org.slf4j.simpleLogger.defaultLogLevelcài đặt. Nó cũng ghi nhật ký ở cấp thông tin, ngay cả khi tôi đặt nó để cảnh báo hoặc lỗi.
Alden

1
@Alden, tôi đang nhận được hành vi tương tự. nó chỉ đơn giản là bị bỏ qua.
jax

18
Đối với tôi, hóa ra việc thêm "-Dorg.slf4j.simpleLogger.defaultLogLevel = thông tin" vào lệnh xây dựng không có tác dụng. Nếu tôi xác định điều này trước khi xây dựng trong MAVEN_OPTS như thế này: xuất "MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel = debug", thì nó hoạt động hoàn hảo mà không thay đổi tập tin $ {MAVEN_HOME .
Gábor Lipták

1
Alden, Gábor Lipták: và đối với tôi không có phương pháp nào trong hai phương pháp này hoạt động. :( Tôi đang sử dụng Maven 3.2.5.
Greg Dubicki

1
nếu windows, trong tệp bat, sử dụng set MAVEN_OPTS =% MAVEN_OPTS% -Dorg.slf4j.simpleLogger.defaultLogLevel = warn
feilong

45

Linux:

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

hoặc là

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

Các cửa sổ:

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

5
nhưng nếu mục đích là giảm IO dư thừa trong mvn ... thì đó không thực sự là mánh khóe
HoaPhan

Làm thế nào chúng ta có thể đạt được điều tương tự trên máy Windows vì egrep không hoạt động trên nó?
hemanto

đại loại nhưmvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
Tom H

Có vẻ như findstrhỗ trợ regex và các tùy chọn khác có thể khiến nó trở nên cô đọng hơn - ss64.com/nt/findstr.html
Tom H

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

32

Bạn có thể đạt được điều này với MAVEN_OPTS, ví dụ
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean

Thay vì đặt thuộc tính hệ thống trực tiếp trên dòng lệnh. (Ít nhất là đối với maven 3.3.1.)

Cân nhắc sử dụng ~/.mavenrcđể cài đặt MAVEN_OPTSnếu bạn muốn đăng nhập thay đổi cho thông tin đăng nhập của bạn trên tất cả các yêu cầu maven.


2
Điều này dường như hoạt động vì tôi có thể vô hiệu hóa thông báo cảnh báo và thông tin bằng cách đặt mức độ lỗi, nhưng thật không may, nó cũng tắt đầu ra thông thường. Tôi thực sự đã cố gắng vô hiệu hóa một số cảnh báo trong khi chạy help:evaluatemục tiêu để in giá trị project.versionvà đầu ra này (mặc dù dường như không đi qua slf4j) cũng bị tắt.
haridsv

Câu trả lời duy nhất hoạt động mà không gây rối vĩnh viễn với cài đặt Maven. Một lý do khác Maven là một con khủng long trong hệ thống xây dựng - nó không hỗ trợ cho các yêu cầu thông thường.
Abhijit Sarkar

16

Nếu bạn đang sử dụng Logback, chỉ cần đặt logback-test.xmltệp này vào src/test/resourcesthư mục:

<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

bạn có thể đạt được điều này bằng cách sử dụng bên dưới trong chính dòng lệnh

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

ví dụ :

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

Thật không may, ngay cả với maven 3, cách duy nhất để làm điều đó là vá mã nguồn.

Dưới đây là hướng dẫn ngắn làm thế nào để làm điều đó.

Bản sao hoặc ngã ba Maven 3 repo: "git clone https://github.com/apache/maven-3.git "

Chỉnh sửa org.apache.maven.cli.MavenCli # ghi nhật ký và thay đổi

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );

đến

cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );

Trong phiên bản chụp nhanh hiện tại, nó ở dòng 270

Sau đó, chỉ cần chạy "mvn install", bản phân phối maven mới của bạn sẽ nằm trong thư mục "apache-maven \ target \"

Xem khác biệt này để tham khảo: https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131


1
Câu trả lời này là OBSOLLEX kể từ bây giờ - a) URL repo đã thay đổi, b) không có tuyên bố mức INFO trong mã này, c) URL khác không hoạt động.
Greg Dubicki

Không quan trọng nơi mã sử dụng INFO - khi phát triển plugin, mojo của bạn nên dựa vào trình ghi maven với getLog()- nếu bạn có thể sống với cấu hình.
Adam

1

Cách đơn giản nhất là nâng cấp lên Maven 3.3.1 trở lên để tận dụng sự ${maven.projectBasedir}/.mvn/jvm.confighỗ trợ.

Sau đó, bạn có thể sử dụng bất kỳ tùy chọn nào từ bộ phận hỗ trợ SimpleLogger của Maven's SL4FJ để định cấu hình tất cả các logger hoặc logger cụ thể. Ví dụ, đây là cách thực hiện tất cả cảnh báo ở warncấp độ, ngoại trừ PMD được định cấu hình để đăng nhập tại error:

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

Xem ở đây để biết thêm chi tiết về đăng nhập với Maven.


1

Thay đổi infothành errortrong simplelogging.propertiestập tin sẽ giúp đạt được yêu cầu của bạn.

Chỉ cần thay đổi giá trị của dòng dưới đây

org.slf4j.simpleLogger.defaultLogLevel=info 

đến

org.slf4j.simpleLogger.defaultLogLevel=error

0

Tôi đã nhận thấy khi sử dụng phiên bản 2.20.1 của plugin maven sunfire , tất cả các cảnh báo được ghi vào một tệp kết xuất. ví dụ/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream


0

Tới simplelogger.propertiestại ${MAVEN_HOME}/conf/logging/và thiết lập các thuộc tính sau:

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

Và hãy cẩn thận: warnkhôngwarning

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.