Tôi chưa bao giờ cần phải làm điều này, nhưng vì tôi đã từng đọc Log4J - Hướng dẫn hoàn chỉnh, tôi hy vọng những gợi ý này sẽ hữu ích.
- Viết lọc tùy chỉnh của riêng bạn bằng cách mở rộng org.apache.log4j.spi.Filter
- Override decide method
- Sử dụng loggingEvent.getLevel(), để xác định mức độ log đã được kích hoạt.
Viết logic sau đây trong quyết định
if(event.getLevel() == Level.INFO || event.getLevel() == Level.FATAL)
return ACCEPT;
return DENY;
Bộ lọc này sẽ chấp nhận tất cả các bản ghi đó là một trong hai INFO hoặc gây tử vong. Bạn có thể sáng tạo hơn.
Xin lưu ý rằng tôi chưa thử nghiệm mã này. Đây chỉ là một hướng dẫn, hy vọng điều này sẽ giúp
Sửa: trên một tìm kiếm chút, tôi thấy một cái gì đó mà có thể được dễ dàng hơn. Tôi đoán, Bạn có thể sử dụng LevelMatchFilter, cách này
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="info" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="fatal" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter"/>
tham khảo: http://wiki.apache.org/logging-log4j/Log4jXmlFormat cho configurarion XML. Có một phần trên Filter Configuration
Tôi không biết điều gì sẽ dừng OP khi chấp nhận câu trả lời này. Tôi vừa thử nghiệm, nó hoạt động:
Đây là XML.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="util" class="org.apache.log4j.FileAppender">
<param name="File" value="D:/util.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%t %-5p %c{2} - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="info" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="fatal" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter"/>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="util" />
</root>
</log4j:configuration>
Đây là mã Java
DOMConfigurator.configure("log4j.xml");
Logger log = Logger.getLogger(Test.class);
log.debug("DEBUG");
log.info("INFO");
log.warn("WARN");
log.error("ERROR");
log.fatal("FATAL");
Đây là kết quả trong (như cấu hình) D:/util.log
main INFO test.Test - INFO
main FATAL test.Test - FATAL
Tại sao bạn không sử dụng WARN và Fatal hoặc CẢNH BÁO và L ERI? Đó thường là những gì hầu hết các dự án tôi đã nhìn thấy, và bạn không phải thay đổi cách log4j hoạt động và có khả năng gây nhầm lẫn cho những người mới tham gia dự án. – jmort253
Không. Tôi đang ghi lại tất cả các cấp tin nhắn. Nhưng trong thực thi bình thường, tôi chỉ cần đăng nhập INFO và FATAL. Sẽ có dịp tôi cần gỡ lỗi ứng dụng. Vào thời điểm đó tôi sẽ đăng nhập tất cả các tin nhắn cấp 5. Tôi hy vọng sẽ làm điều đó bằng cách thay đổi tập tin cấu hình bên ngoài (không phải là một được sử dụng cho log4j) mà thay đổi mức độ ưu tiên của logger tôi đang sử dụng. – nath
Bài tập về nhà ở mọi nơi? – gabuzo