วิธีบันทึกข้อยกเว้นและข้อความด้วยตัวยึดตำแหน่งด้วย SLF4J


85

แนวทางที่ถูกต้องในการบันทึกทั้งข้อความแสดงข้อผิดพลาดและข้อยกเว้นโดยใช้SLF4Jคืออะไร?

ฉันได้ลองทำสิ่งนี้แล้ว แต่ไม่เคยพิมพ์การติดตามสแต็กข้อยกเว้น:

logger.error("Unable to parse data {}", inputMessage, e);

ในกรณีนี้ฉันต้องการเติมข้อมูล{}ด้วยinputMessageเช่นเดียวกับการออกจากระบบ stacktrace ข้อยกเว้น

วิธีเดียวที่ฉันสามารถทำได้คือทำสิ่งนี้:

logger.error("Unable to parse data " + inputMessage, e);

ซึ่งไม่สวย


บรรทัด fist logger.error ทำงานตามที่คุณต้องการใน slf4j เวอร์ชัน 1.7.25
kiml42

คำตอบ:


132

ตั้งแต่ SLF4J เวอร์ชัน 1.6 SLF4J จะตีความพารามิเตอร์สุดท้ายตามที่คุณต้องการกล่าวคือเป็นข้อยกเว้น คุณต้องใช้ SLF4J API เวอร์ชันเก่ากว่า


7
มีอธิบายไว้ใน Javadoc หรือไม่? ฉันคาดหวังว่าจะพบข้อมูลที่คล้ายกันที่นี่: slf4j.org/apidocs/org/slf4j/Logger.html
Scot

2
ฉันเชื่อคุณ แต่เหมือน @Scot ฉันหวังว่าพฤติกรรมนี้จะได้รับการบันทึกไว้
Stephan

4
ชาวสกอต @Stephan - พฤติกรรม aformentioned ดูเหมือนว่าจะมีการบันทึกไว้ในคำถามที่พบบ่อยของพวกเขาที่นี่
Priidu Neemre

8
นี่เป็นเหมือนความลับที่ดีที่สุด ขอบคุณที่ชี้ให้เห็น คำถามติดตามของฉันคือทำไมพวกเขาถึงซ่อนความจริงที่ว่าเป็นไปได้ใน var-arg? ทำไมพวกเขาไม่สามารถสร้างเมธอดโอเวอร์โหลดใหม่ที่ใช้Throwableแล้วมี var-arg หลังจากนั้น? มีปัญหาในการลบหรือไม่? นี่เป็นมาตรฐานในไลบรารีอื่นหรือไม่ที่จะมีการส่งข้อยกเว้นเป็นอาร์กิวเมนต์สุดท้าย
gaoagong

7
นี้ได้ (? ตั้งแต่) ได้รับการบันทึกไว้ในคำถามที่พบบ่อย: slf4j.org/faq.html#paramException ฉันยอมรับว่าคุณลักษณะนี้ควรได้รับการบันทึกไว้อย่างชัดเจนยิ่งขึ้น
Stephan202
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.