2012-01-03 66 views
10

Tôi sử dụng thư viện kế thừa viết nhật ký bằng log4j. Tệp log4j.properties mặc định của tôi chỉ đạo nhật ký cho bàn điều khiển, nhưng trong một số chức năng cụ thể của chương trình chính của tôi, tôi muốn tắt hoàn toàn việc ghi nhật ký (từ tất cả các lớp).Cách tắt ghi nhật ký log4j từ mã Java

Tôi cố gắng này:

Logger.getLogger(BasicImplementation.class.getName()).setLevel(Level.OFF); 

nơi "BasicImplementation" là một trong những lớp học chính mà không đăng nhập, nhưng nó đã không làm việc - các bản ghi vẫn được ghi vào giao diện điều khiển.

Đây là log4j.properties tôi:

log4j.rootLogger=warn, stdout 
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile 
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn 

log4j.appender.stdout = org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n 

log4j.appender.logfile = ac.biu.nlp.nlp.log.BackupOlderFileAppender 
log4j.appender.logfile.append=false 
log4j.appender.logfile.layout = org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n 
log4j.appender.logfile.File = logfile.log 
+1

Có khả năng là bạn phải vô hiệu hóa các gốc logger, nhưng xin vui lòng gửi 'log4j.properties'/'log4j.xml' của bạn đầu tiên. – MaDa

+0

OK, tôi đã đăng nó –

Trả lời

18

Vì vậy, bạn có 3 logger xác định, bao gồm cả gốc:

log4j.rootLogger=warn, stdout 
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile 
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn 

Thật không may, để vô hiệu hóa chúng programatically, bạn cần phải xác định tất cả chúng trong các mã:

Logger.getLogger("ac.biu.nlp.nlp.engineml").setLevel(Level.OFF); 
Logger.getLogger("org.BIU.utils.logging.ExperimentLogger").setLevel(Level.OFF); 
Logger.getRootLogger().setLevel(Level.OFF); 

Here's cách để đặt lại về những gì được đặt trong tệp cấu hình.

+0

Tuyệt vời, nó đã hoạt động! –

-1

Thêm tin sau vào tệp tệp nhật ký

log4j.logger.com.class.with.package.BasicImplementation = off, logfiledata 

log4j.appender.logfiledata = ac.biu.nlp.nlp.log.BackupOlderFileAppender 
log4j.appender.logfiledata.append=false 
log4j.appender.logfiledata.layout = org.apache.log4j.PatternLayout 
log4j.appender.logfiledata.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n 
log4j.appender.logfiledata.File = logfiledata.log 

Nếu ở trên sẽ không dừng nếu từ ghi nhật ký, ít nhất nó sẽ ghi lại tất cả dữ liệu từ lớp BasicImplementation vào một tệp riêng biệt.

+0

-1. Giống như của Rick. – MaDa

6

Bạn có thể sử dụng

Logger.getRootLogger().setLevel(Level.OFF); 

để vô hiệu hóa bất kỳ đăng nhập vào mã java

+1

Điều này sẽ không hoạt động nếu bạn đã tùy chỉnh nhật ký. – Amos

9

Nếu bạn muốn đạt được sự im lặng hoàn hảo (như một công cụ dòng lệnh yên tĩnh), bạn luôn có thể sử dụng NullAppender.

Logger.getRootLogger().removeAllAppenders(); 
Logger.getRootLogger().addAppender(new NullAppender()); 
+0

Cảm ơn, đã làm việc hoàn hảo cho tôi :) – Ashwin

0

Có lẽ như thế:

Logger.getRootLogger().shutdown();

Các vấn đề liên quan