วิธีเริ่มต้น log4j2 ในแอพที่ใช้การกำหนดค่า Spring Java ในระหว่างการทดสอบหน่วย

ฉันใช้ Spring Framework (4.1.0) เพื่อสร้างแอปพลิเคชันตัวอย่างที่ฉันสามารถเล่นกับ Unit Tests ได้

คลาสทดสอบของฉันใช้คำอธิบายประกอบ @RunWith(SpringJUnit4ClassRunner.class) ซึ่งบันทึก คำเตือน

log4j:WARN ไม่พบผู้ผนวกสำหรับตัวบันทึก (org.springframework.test.context.junit4.SpringJUnit4ClassRunner)

log4j:WARN โปรดเริ่มต้นระบบ log4j อย่างถูกต้อง

ในคอนโซลเพราะฉันไม่ได้ใช้การกำหนดค่าตามไฟล์ log4j2

คลาสทดสอบของฉันยังใช้คำอธิบายประกอบ @ContextConfiguration(classes = { AppConfig.class, ServletConfig.class }) เพื่อชี้ไปที่บริบทที่ฉันพยายามเริ่มต้น log4j2

คำถาม: ฉันจะเริ่มต้น log4j2 อย่างถูกต้องเพื่อใช้กับ SpringJUnit4ClassRunner โดยไม่ต้องกำหนดค่าตามไฟล์ได้อย่างไร

ยินดีต้อนรับวิธีการกำหนดค่าอื่น ๆ ที่ใช้ Java :)


person xyz    schedule 13.09.2014    source แหล่งที่มา
comment
ฉันวางไฟล์ log4j.xml ไว้ในโฟลเดอร์ test/resources   -  person Hannes    schedule 13.09.2014
comment
และสำหรับบันทึกนั้น SpringJUnit4ClassRunner ไม่มีส่วนเกี่ยวข้องกับ log4j   -  person Hannes    schedule 13.09.2014
comment
@ Hannes แก้ไขฉันด้วยถ้าฉันผิด แต่ในแหล่งที่มาของ SpringJUnit4ClassRunner ที่จุดเริ่มต้นเรามี private static final org.apache.commons.logging.Log logger; ซึ่งหมายความว่ามันเกี่ยวข้องกับ log4j2   -  person xyz    schedule 13.09.2014
comment
นั่นคือการบันทึกทั่วไปและจะค้นหากลไกการบันทึกที่คุณใช้ ดังนั้นหากพบ log4 lib ก็จะใช้สิ่งนี้ หากไม่พบสิ่งใดก็จะใช้ sysout   -  person Hannes    schedule 13.09.2014
comment
คุณพูดถูก แต่คำถามยังคงใช้ได้อยู่   -  person xyz    schedule 13.09.2014


คำตอบ (3)


คุณสามารถเริ่มต้น Log4j2 โดยทางโปรแกรมได้ มีตัวอย่างที่นี่ บนเว็บไซต์ Log4j2 ใต้ส่วน < em>'การเพิ่มการกำหนดค่าปัจจุบันโดยทางโปรแกรม' แสดงวิธีการเพิ่มส่วนต่อท้าย

person Excite    schedule 20.01.2015

เพิ่มเนื้อหาไฟล์ต่อไปนี้เป็น log4j.xml ไปยังรูทของคลาสพาธของคุณ:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/'> 
   <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n"/>
      </layout>
   </appender>
   <root>
      <level value="INFO"/>
      <appender-ref ref="consoleAppender"/>
   </root>
</log4j:configuration>

สิ่งนี้ควรกำหนดค่า log4j อย่างไรก็ตาม ให้ตรวจสอบเส้นทาง lib ของคุณ จะต้องมีโถ log4j อยู่ที่ใดก็ได้

person Hannes    schedule 13.09.2014

คุณอาจมีทั้ง log4j และ log4j2 jars บน classpath ของคุณ

ดังนั้น SpringJUnit4ClassRunner จึงพยายามใช้ log4j แทน log4j2 ลบโถ log4j ออกแล้วใช้ log4j-1.2-api แทน

http://logging.apache.org/log4j/2.x/faq.html#which_jars

person Victor Lyuboslavsky    schedule 18.01.2015