log4j: บันทึกผลลัพธ์ของคลาสเฉพาะไปยัง appender ที่ระบุ


161

ฉันใช้ log4j และต้องการกำหนดเส้นทางเอาต์พุตของตัวบันทึกบางตัวไปยังไฟล์ที่ระบุ

ฉันมีผู้ใช้หลายคนแล้ว ตอนนี้เพื่อให้การดีบักง่ายขึ้นฉันต้องการบอก log4j ว่าเอาต์พุตที่สร้างโดยคลาสเฉพาะ (เช่น foo.bar.Baz) ควรเขียนลงในไฟล์บันทึกเฉพาะ

สามารถทำได้หรือไม่

คำตอบ:


203

ตัวอย่าง:

log4j.rootLogger=ERROR, logfile

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.datePattern='-'dd'.log'
log4j.appender.logfile.File=log/radius-prod.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

log4j.logger.foo.bar.Baz=DEBUG, myappender
log4j.additivity.foo.bar.Baz=false

log4j.appender.myappender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.myappender.datePattern='-'dd'.log'
log4j.appender.myappender.File=log/access-ext-dmz-prod.log
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout
log4j.appender.myappender.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

21
อ่า - ง่ายมาก! ขอบคุณ! การตั้งค่า log4j.additivity.foo.bar.Baz = false บังคับให้เอาท์พุทของ Baz จะไม่ปรากฏใน appender ของ rootLogger หรือไม่?
gubrutz

3
รุ่นนี้ของ log4J มีไว้เพื่ออะไร? ฉันพยายามที่จะหาสิ่งที่คอนฟิกูเรชัน XML เพื่อทำสิ่งเดียวกันสำหรับรุ่น log4j 1.2.17
AC

1
@RodrigoGurgel ใช่ไม่มีอะไรผิดปกติที่นั่น
Maurice Perry

4
@dwjohnston การตั้งค่าความไวต่อการเท็จจะป้องกันไม่ให้คนตัดไม้เข้าสู่ระบบของบรรพบุรุษ (มันเป็นความจริงโดยค่าเริ่มต้น), ในกรณีนี้ถ้าความไวต่อสารถูกทิ้งเป็นจริงการบันทึกไปยัง appaz Baz จะเขียนลงไฟล์ทั้งสอง
Maurice Perry

1
มีความคิดเห็นเกี่ยวกับการกำหนดค่า xml หรือไม่
Igor Donin

21

ต่อไปนี้เป็นคำตอบเกี่ยวกับการกำหนดค่า XML โปรดทราบว่าหากคุณไม่ให้ appender ไฟล์ConversionPatternมันจะสร้างไฟล์ 0 ไบต์และไม่เขียนอะไรเลย:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <appender name="bdfile" class="org.apache.log4j.RollingFileAppender">
        <param name="append" value="false"/>
        <param name="maxFileSize" value="1GB"/>
        <param name="maxBackupIndex" value="2"/>
        <param name="file" value="/tmp/bd.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <logger name="com.example.mypackage" additivity="false">
        <level value="debug"/>
        <appender-ref ref="bdfile"/>
    </logger>

    <root>
        <priority value="info"/>
        <appender-ref ref="bdfile"/>
        <appender-ref ref="console"/>
    </root>

</log4j:configuration>

2
มันเป็นสิ่งสำคัญที่จะลบออก <appender-ref ref="bdfile"/>จาก<root>- มิฉะนั้นคุณจะเห็นบันทึกทั้งหมดของคุณคัดลอกไปยังไฟล์นี้เช่นกัน
sab

วิธีกำหนดค่านี้สำหรับ pacakge เริ่มต้นหรือคลาสที่ไม่มีแพ็คเกจ
Prasad Jadhav

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