log4j: Nhật ký đầu ra của một lớp cụ thể cho một appender cụ thể


161

Tôi sử dụng log4j và muốn định tuyến đầu ra của một số Loggers nhất định đến các tệp cụ thể.

Tôi đã có nhiều appender tại chỗ. Bây giờ, để làm cho việc gỡ lỗi dễ dàng hơn, tôi muốn nói với log4j rằng đầu ra được tạo bởi một lớp cụ thể (ví dụ foo.bar.Baz) nên được ghi vào một tệp nhật ký cụ thể.

Điều này có thể được thực hiện?

Câu trả lời:


203

Một ví dụ:

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
àh - đơn giản quá! Cảm ơn! Liệu log4j.add nhạy.foo.bar.Baz = cài đặt sai có thực thi rằng đầu ra của Baz sẽ không hiển thị trong appender của rootLogger không?
gubrutz

3
Phiên bản này của log4J là gì? Tôi đang cố gắng tìm cấu hình xml để thực hiện điều tương tự cho phiên bản log4j 1.2.17
AC

1
@RodrigoGurgel vâng, không có gì bất thường ở đó
Maurice Perry

4
@dwjohnston cài đặt tính gây nghiện thành false sẽ ngăn logger đăng nhập vào các appender của tổ tiên của nó (theo mặc định là đúng), trong trường hợp này, tính gây nghiện được để thành true, đăng nhập vào appender Baz sẽ được ghi vào cả hai tệp.
Maurice Perry

1
Bạn có suy nghĩ gì về cấu hình xml không?
Igor Donin

21

Đây là câu trả lời liên quan đến cấu hình XML, lưu ý rằng nếu bạn không cung cấp cho trình nối thêm tệp, ConversionPatternnó sẽ tạo tệp 0 byte và không ghi bất cứ điều gì:

<?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
điều quan trọng là phải xóa <appender-ref ref="bdfile"/>khỏi <root>- nếu không bạn cũng sẽ thấy toàn bộ nhật ký của mình được sao chép vào tệp này.
sab

Làm thế nào để cấu hình cái này cho pacakge mặc định hoặc cho lớp cụ thể mà không có gói?
Prasad Jadhav

Đó là <logger>...yếu tố. Chỉ định lớp hoặc gói làm tên và appender là appender tệp.
mikeb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.