เครื่องหมายใน Java Logging framework คืออะไรและมีเหตุผลอะไรที่ต้องใช้?


110

ครั้งแรกที่ฉันได้ยินเกี่ยวกับเครื่องหมายเมื่ออ่าน:

http://slf4j.org/faq.html

ฉันตรวจสอบวิธีการที่ใช้ได้สำหรับวัตถุLogger :

และพบอินเทอร์เฟซ:

ข้อมูลเชิงลึกเพิ่มเติมที่ฉันได้รับจาก:

แต่ก็ยังสับสน ... โปรดทราบว่าฉันถามว่าทำไมไม่ใช่วิธีใช้ดังนั้นนี่จึงไม่ซ้ำกับ:

UPDATEดูเหมือนว่าเมื่อคุณใช้เครื่องหมายคุณต้องเขียนโค้ด Java ที่กำหนดเองแทนการกำหนดค่าในไฟล์ XMLหรือ. คุณสมบัติ ...

อัปเดต 2จากhttp://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator

Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN");
logger.error(notifyAdmin,
  "This is a serious an error requiring the admin's attention",
   new Exception("Just testing"));

ในการใช้เครื่องหมายคุณต้องใช้ marker API ที่ SLF4J ให้มา คุณหมายถึง "โค้ด Java ที่กำหนดเอง" หรือไม่
Ceki

@Ceki ดูเหมือนว่าการใช้Logger.warn (Marker, msg)ไม่ได้ให้ประโยชน์อะไรเลยจนกว่าคุณจะเขียนคลาสที่กำหนดเองสำหรับตัวกรองและลงทะเบียน ... ไวยากรณ์ธรรมดาของlogback.xmlไม่มีความสามารถพิเศษในการทำงานกับMarker (เพียง พิมพ์โดย% marker )
gavenkoa

1
สิ่งที่พบ "พิเศษ" ในสิ่งที่นำเสนอที่logback.qos.ch/manual/appenders.html#OnMarkerEvaluator ?
Ceki

@Ceki ขอบคุณสำหรับจุด! เป็นที่เดียวที่สามารถใช้เครื่องหมายได้หรือไม่?
gavenkoa

1
@Ceki ตอนนี้เราใช้ Elasticsearch เป็นวิธีทำเครื่องหมายกิจกรรมพิเศษ เราเก็บเครื่องหมายที่กำหนดไว้ล่วงหน้าในชั้นเรียนเฉพาะเพื่อใช้ซ้ำ ไม่ชัดเจนเมื่อคุณใช้grepกับบันทึกข้อความ
gavenkoa

คำตอบ:


118

นี่เป็นเวอร์ชันที่ปรับปรุงใหม่สำหรับคำถาม " แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ Markers ใน SLF4J / Logback "

Markers สามารถใช้เพื่อระบายสีหรือทำเครื่องหมายคำสั่งบันทึกเดียว สิ่งที่คุณทำกับสีเหล่านี้เช่นเครื่องหมายขึ้นอยู่กับคุณทั้งหมด อย่างไรก็ตามรูปแบบสองรูปแบบดูเหมือนจะเป็นเรื่องธรรมดาสำหรับการใช้เครื่องหมาย

  1. ทริกเกอร์ : ผู้ตรวจสอบบางคนอาจได้รับคำสั่งให้ดำเนินการต่อหน้าเครื่องหมายบางอย่าง ตัวอย่างเช่นSMTPAppenderสามารถกำหนดค่าให้ส่งอีเมลเมื่อใดก็ตามที่เหตุการณ์การบันทึกถูกทำเครื่องหมายด้วยNOTIFY_ADMINเครื่องหมายโดยไม่คำนึงถึงระดับการบันทึก ดูการทริกเกอร์โดยใช้เครื่องหมายในเอกสารการบันทึกการย้อนกลับ คุณยังรวมระดับการบันทึกและเครื่องหมายสำหรับการทริกเกอร์ได้ด้วย

  2. การกรอง : เครื่องหมายมีประโยชน์มากในการทำให้ข้อความบันทึกที่มีคุณค่าโดดเด่น ตัวอย่างเช่นคุณสามารถระบายสี / ทำเครื่องหมายบันทึกที่เกี่ยวข้องกับการคงอยู่ทั้งหมดของคุณ (ในไฟล์คลาสต่างๆและหลายไฟล์) ด้วยสี "DB" จากนั้นคุณสามารถกรอง "DB": ปิดใช้งานการบันทึกยกเว้นคำสั่งบันทึกที่มี DB ดูบทเกี่ยวกับตัวกรองในเอกสารการบันทึกย้อนกลับสำหรับข้อมูลเพิ่มเติม (ค้นหา MarkerFilter) โปรดทราบว่าการกรองเครื่องหมายสามารถทำได้ไม่เพียงแค่การบันทึกกลับเท่านั้น แต่ยังมีเครื่องมือวิเคราะห์บันทึกด้วย

ก่อนการถือกำเนิดของ Markers เพื่อให้บรรลุพฤติกรรมที่คล้ายกันคุณมีตัวเลือก 1) ใช้ระดับที่กำหนดเอง 2) ใช้ชื่อคนตัดไม้ที่แก้ไข ปัจจุบัน SLF4J API ไม่รองรับระดับที่กำหนดเอง สำหรับตัวเลือกที่ 2 ชื่อคนตัดไม้ต่อท้าย (หรือคำนำหน้า) สามารถใช้งานได้หากจำเป็นต้องแก้ไขหนึ่งหรือสองคนตัดไม้ วิธีการนี้ใช้ไม่ได้ผลทันทีที่นักตัดไม้ 3 คนขึ้นไปจำเป็นต้อง "แบ่งประเภทย่อย" เนื่องจากไฟล์การกำหนดค่าที่เกี่ยวข้องไม่สามารถจัดการได้

แม้ว่าเครื่องหมายเดียวจะมีประโยชน์มากอยู่แล้ว SLF4J เวอร์ชันถัดไปคือเวอร์ชัน 2.0 จะอนุญาตให้มีเครื่องหมายหลายตัวต่อคำสั่งบันทึก


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