ลบ Log4j และใช้ Logback

เป็นไปได้ไหมที่จะใช้ Logback แทน Log4j ฉันได้แยกการพึ่งพา log4j ออกจากไฟล์เกรดโปรเจ็กต์ทั้งหมดของฉัน แต่เมื่อฉันสร้างโหนด log4j ยังคงถูกนำเข้ามาจาก Corda-core

ด้านล่างนี้เป็นวิธีที่ฉันแยกการขึ้นต่อกันในการไล่ระดับ

configurations.all {
  exclude group: 'org.apache.logging.log4j', module: 'log4j-api'
  exclude group: 'org.apache.logging.log4j', module: 'log4j-core'
  exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j-impl'
  exclude group: "org.slf4j", module: "jcl-over-slf4j"
  exclude group: 'org.apache.logging.log4j', module: 'log4j-web'
}

ฉันเพิ่ม logback เป็นการพึ่งพา

compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'

แต่หลังจากปรับใช้โหนดและเริ่มต้นใช้งานแล้ว ฉันเห็นว่าโหนดยังคงใช้โรงงานตัวบันทึก log4j

    SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/daniel.newton/.capsule/apps/net.corda.node.Corda_3.1-corda/log4j-slf4j-impl-2.9.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/daniel.newton/dev/projects/corda/build/nodes/party/cordapps/trade-input-cordapp-1.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/daniel.newton/dev/projects/corda/build/nodes/party/cordapps/common-1.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/daniel.newton/dev/projects/corda/build/nodes/party/cordapps/corda-1.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

บรรทัดบันทึกเหล่านี้แนะนำว่าไม่พบการเข้าสู่ระบบกลับด้วยซ้ำ

ข้อมูลเพิ่มเติมอีกประการหนึ่งก็คือ เมื่อฉันรันการทดสอบที่มีอยู่ในหนึ่งในโปรเจ็กต์เดียวกัน เนื่องจาก Cordapps ด้านล่างทำงานได้ดีและรับ Logback ได้สำเร็จ แต่การรันโหนดไม่สามารถทำได้


person Dan Newton    schedule 25.05.2018    source แหล่งที่มา
comment
เพียงลบไฟล์การรวม log4j และ slf4j->log4j ออกจากคลาสพาธ และเพิ่ม Logback และการรวม Logback->slf4j ลงในคลาสพาธ และอย่าลืมแทนที่ log4j ด้วยการกำหนดค่า Logback   -  person Victor Gubin    schedule 25.05.2018
comment
@VictorGubin ฉันได้เรียกใช้ gradle dependencies และไม่มีการพึ่งพา log4j ทุกที่ที่จะพบ แต่ log4j ยังคงถูกหยิบขึ้นมาในแต่ละครั้ง (ซึ่งฉันรู้ว่ามันยังอยู่ที่นั่นที่ไหนสักแห่ง) ดูเหมือนว่า net.corda.node.Corda_3.1-corda/log4j-slf4j-impl-2.9.1.jar! จะรวมมันไว้ด้วย ฉันได้ทำ clean build ไปแล้วด้วย   -  person Dan Newton    schedule 29.05.2018


คำตอบ (2)


แนวปฏิบัติที่ดีที่สุดสำหรับการเลือกเฟรมเวิร์กการบันทึกคือ ควรกำหนดไว้ที่ระดับ แอปพลิเคชัน ไม่ใช่ที่ระดับไลบรารี (cordapp)

ในกรณีของ Cordapps เราควรใช้ SLF4J API และปล่อยให้เป็นรันไทม์ (corda.jar) เพื่อตัดสินใจเชื่อมโยงที่เหมาะสม corda.jar ใช้การใช้งาน log4j บางทีคุณอาจต้องแจ้งปัญหาบน GitHub เพื่อให้สามารถสลับผู้ให้บริการบันทึกได้

person dazraf    schedule 29.05.2018

การพึ่งพา log4j ใน Corda Core ถูกลบออกโดย PR นี้ ซึ่งจะอยู่ใน Corda รุ่นหลักถัดไป: https://github.com/corda/corda/pull/3257

อย่างไรก็ตาม ฉันจะสะท้อนมุมมองของดาซราฟเกี่ยวกับแนวปฏิบัติที่ดีที่สุดที่นี่

person Joel    schedule 29.05.2018