วิธีการเปลี่ยนระดับการบันทึก maven เพื่อแสดงคำเตือนและข้อผิดพลาดเท่านั้น?


142

ฉันต้องการป้องกันไม่ให้ maven แสดงข้อความ INFO ฉันต้องการดูเฉพาะคำเตือนและข้อผิดพลาด (ถ้ามี)

ฉันจะบรรลุสิ่งนี้ได้อย่างไรโดยเฉพาะอย่างยิ่งโดยการเปลี่ยนบรรทัดคำสั่งที่เรียก maven?


หัวข้อที่เกี่ยวข้อง: stackoverflow.com/questions/71069/... -B, --batch-modeหรือ-qจะทำให้mvnverbose น้อยลง
Stanislav

คำตอบ:


108

ตอบคำถามของคุณ

ฉันทำการตรวจสอบเพียงเล็กน้อยเพราะฉันสนใจวิธีแก้ปัญหาด้วย

Maven ตัวเลือกบรรทัดคำสั่ง verbosity

ตามที่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 เลือกระดับเริ่มต้นจากไฟล์ปรับแต่งบน classpath ฉันยังลองการตั้งค่าอื่น ๆ สองสามรายการผ่าน System.properties แต่การตั้งค่าทั้งหมดไม่สำเร็จ

ภาคผนวก

คุณสามารถหาที่มาของ slf4j บน github ได้ที่นี่: slf4j github

แหล่งที่มาของ simplelogger ที่นี่: slf4j / jcl-over-slf4j / src / main / java / org / apache / คอมมอนส์ / การบันทึก / impl / SimpleLog.java

โหลดรถตักดินช่องท้องsimplelogger.properties


2
คุณได้รับการsimplelogger.propertiesเปลี่ยนแปลงการทำงานหรือไม่ เมื่อฉันเปลี่ยนการorg.slf4j.simpleLogger.warnLevelStringตั้งค่าการmvn compileปรับปรุงอย่างเหมาะสม แต่ดูเหมือนว่าจะละเว้นการorg.slf4j.simpleLogger.defaultLogLevelตั้งค่า นอกจากนี้ยังบันทึกที่ระดับข้อมูลแม้เมื่อฉันตั้งให้เตือนหรือผิดพลาด
Alden

1
@ อายุมากกว่าฉันได้รับพฤติกรรมเดียวกัน มันจะถูกละเว้นเพียง
jax

18
สำหรับฉันมันกลับกลายเป็นว่าการเพิ่ม "-Dorg.slf4j.simpleLogger.defaultLogLevel = info" ลงในคำสั่ง build ไม่มีผลใด ๆ ถ้าฉันกำหนดสิ่งนี้ก่อนสร้างใน MAVEN_OPTS เช่นนี้: ส่งออก "MAVEN_OPTS = $ MAVEN_OPTS -Dorg.slf4j.simpleLogger.defaultLogLevel = debug" มันทำงานได้อย่างสมบูรณ์แบบโดยไม่ต้องเปลี่ยน $ {MAVEN_HOME} /conf/logging/simplelogger .
GáborLipták

1
Alden, GáborLipták: และสำหรับฉันทั้งสองวิธีก็ใช้ไม่ได้ :( ฉันใช้ Maven 3.2.5
Greg Dubicki

1
ถ้า windows ในไฟล์ bat ให้ใช้ชุด MAVEN_OPTS =% MAVEN_OPTS% -Dorg.slf4j.simpleLogger.defaultLogLevel = เตือน
feilong

45

ลินุกซ์:

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 ไม่ทำงาน
hemanto

อะไรทำนองนั้นmvn validate clean install | findstr /V /B "\[INFO\]" | findstr /V /B "\[WARN\]"
Tom H

ดูเหมือนfindstrรองรับ regex และตัวเลือกอื่น ๆ ที่อาจทำให้รวบรัดมากขึ้น - 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: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

คุณสามารถทำได้โดยใช้ด้านล่างใน commandline เอง

 -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 ติดตั้ง", maven distro ใหม่ของคุณจะอยู่ในโฟลเดอร์ "apache-maven \ target \"

ดูสิ่งนี้สำหรับการอ้างอิง: https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131


1
คำตอบนี้คือ OBSOLETE ณ ตอนนี้ a) repo URL มีการเปลี่ยนแปลง b) ไม่มีคำสั่งระดับ INFO ในรหัสนี้ c) URL ต่าง ๆ ไม่ทำงาน
Greg Dubicki

ไม่สำคัญว่าจะใช้รหัสใดใน INFO - เมื่อพัฒนาปลั๊กอิน Mojo ของคุณควรเชื่อถือ Maven Logger ด้วยgetLog()- หากคุณสามารถใช้งานได้กับการกำหนดค่า
อดัม

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

0

ฉันสังเกตว่าเมื่อใช้ปลั๊กอิน mfire sunfire รุ่น2.20.1คำเตือนทั้งหมดจะถูกเขียนลงในไฟล์ 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.