2013-07-03 30 views
5

Tôi không sử dụng tệp cấu hình hoặc xml để định cấu hình log4j vì không cần định cấu hình nó sâu. Tôi chỉ cần in các tin nhắn vào giao diện điều khiển. vì vậy tôi làm điều này:Cách cấu hình log4j để chỉ ghi thông tin thông tin và cao hơn?

BasicConfigurator.configure(); 

và in chỉ thông tin và tin nhắn cao hơn tôi làm điều này:

Logger LOG = Logger.getLogger(MyClass.class) 
LOG.setLevel(Level.INFO); 

Nhưng tuy nhiên tôi thấy các thông điệp debug trong giao diện điều khiển quá. Nhưng tôi chỉ cần thông tin và thực sự là thông báo lỗi được in.

Cách thực hiện việc này?

UPD: Tôi tạo ra một tập tin cấu hình với chứa, như mô tả trong hướng dẫn ở đây: manual sau:

log4j.rootLogger=INFO, stdout 

    # Direct log messages to stdout 
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
    log4j.appender.stdout.Target=System.out 
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L  %m%n 

log4j.logger.com.messagedna.facade=INFO 
log4j.logger.com.messagedna.receiver=INFO 
log4j.logger.com.messagedna.util=INFO 
log4j.logger.com.messagedna.parser=INFO 

tôi đặt nó vào com.messagedna

Trong mỗi lớp Tôi cần logger trong Tôi đã viết như sau:

Properties props = new Properties(); 
try { 
    props.load(new FileInputStream("/log4j.properties")); 
    } catch (Exception e){ 
     LOG.error(e); 
     } 
PropertyConfigurator.configure(props); 

nhưng w hen tôi chạy ứng dụng của tôi, tôi nhận được như sau:

log4j:WARN No appenders could be found for logger (com.messagedna.server.util.Config). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
+0

Log4j của bạn sống ở thư mục gốc của hệ thống tệp của bạn ?! –

+1

Tôi không thể vận hành các khái niệm như vậy.Bạn có nghĩa là nơi tập tin cấu hình được hoặc những gì khác? –

Trả lời

5

Bạn chỉ được thiết lập mức cho các tin nhắn đăng nhập bằng cách sử dụng logger cho MyClass.class, tuy nhiên bất kỳ tin nhắn ở mức debug trên các logger khác sẽ vẫn được in.

Điều bạn thực sự cần làm là đặt mức nhật ký trên trình xử lý nhật ký bảng điều khiển (có trách nhiệm in tất cả thông báo tường trình vào bảng điều khiển). Tuy nhiên làm điều này trong khi sử dụng BasicConfigurator sẽ khá phức tạp để thực hiện, bạn nên chuyển sang cấu hình ghi nhật ký được chỉ định trong tệp thuộc tính (linh hoạt hơn nhiều).

Tôi khuyên bạn nên làm việc qua log4j logging configuration tutorial - điều này sẽ giúp bạn tập hợp chính xác cấu hình bạn muốn và phải chứng minh đầu tư đáng giá thời gian của bạn. Tuy nhiên, nếu bạn muốn có được điều này được thực hiện một cách nhanh chóng, hãy thử thêm nội dung dưới đây vào file log4j.properties (example taken from here):

# Root logger option 
log4j.rootLogger=INFO, stdout 

# Direct log messages to stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

Và sau đó thay đổi mã của bạn để làm những việc sau:

Properties props = new Properties(); 
props.load(new FileInputStream("/my/path/to/log4j.properties")); 
PropertyConfigurator.configure(props); 
+0

nơi tôi sẽ nhận được Thuộc tính? –

+0

Điều này được tìm thấy tại 'java.util.Properties' - xin lỗi nên đã làm rõ rằng – robjohncox

+0

Nếu tôi sử dụng biến thể của bạn tôi nhận được những điều sau đây: log4j: WARN Không có appender có thể được tìm thấy cho logger (com.messagedna.server.util.Config). log4j: WARN Vui lòng khởi tạo hệ thống log4j đúng cách. log4j: WARN Xem http://logging.apache.org/log4j/1.2/faq.html#noconfig để biết thêm thông tin. –

3

Configure log4j.properties:

log4j.rootLogger=DEBUG, A1 

log4j.logger.com.MYPACKAGE=INFO, A1 

log4j.appender.A1=org.apache.log4j.ConsoleAppender 
+0

và không có cách nào để làm điều đó trong mã? –

+0

Tôi hiểu. và tôi sẽ đặt tập tin này ở đâu? đến gói tôi sử dụng logger trong? –

+0

Ok nhìn: http://stackoverflow.com/questions/8965946/configuring-log4j-loggers-programmatically nhưng tôi không khuyên bạn nên nó, tại sao phức tạp everithing khi không cần nó – surfealokesea

1

Vì bạn chỉ muốn sử dụng để làm điều đó theo mã số

Có một giải pháp thay thế.

Làm điều này vào lúc bắt đầu, một mã khởi tạo tĩnh sẽ làm việc

logger = Logger.getLogger(Class.getName(), factory); 
logger.setLevel(Level.INFO); 

Có nói rằng, theres không có lý do gì để không sử dụng log4j.xml. Nó rất dễ sử dụng.

+0

nhà máy nào bạn muốn nói? –

+1

bất kỳ lớp nào triển khai LoggerFactory –

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