2010-02-25 37 views
13

Có Logger nào có thể dễ dàng đăng nhập stacktrace của tôi (những gì tôi nhận được với ex.printStackTrace())? Tôi đã tìm kiếm tài liệu log4j và không tìm thấy gì về cách ghi nhật ký stacktrace.Java - Cần một gói ghi nhật ký sẽ ghi lại stacktrace

tôi có thể làm điều này bản thân mình với

StringWriter sw = new StringWriter(); 
ex.printStackTrace(new PrintWriter(sw)); 
String stacktrace = sw.toString(); 
logger.error(stacktrace); 

nhưng tôi không muốn lặp lại mã này ở khắp mọi nơi.

Nếu log4j không thực hiện việc này đối với tôi, có một gói ghi nhật ký khác sẽ ghi nhật ký ngăn xếp cho tôi không?

Cảm ơn.

Trả lời

32

Sử dụng log4j này được thực hiện với:

logger.error("An error occurred", exception); 

Đối số đầu tiên là một thông điệp sẽ được hiển thị, thứ hai là ngoại lệ (Throwable) mà stacktrace được đăng nhập.

lựa chọn khác là commons-logging, nơi đó là giống nhau:

log.error("Message", exception); 

Với java.util.logging này có thể được thực hiện thông qua:

logger.log(Level.SEVERE, "Message", exception); 
+0

Bất kỳ cơ sở tiêu chuẩn nào để chỉ cần đăng nhập stacktra ce? Đôi khi tôi chỉ không biết (hoặc muốn) những gì để đưa vào tin nhắn –

3

Trong java.util.logging bạn có thể khởi tạo logger với log định dạng tùy chỉnh như ở đây:

private Logger initTextLogger() throws SecurityException, IOException { 
     Logger logger = Logger.getLogger(YourClass.class.getName()); 
     FileHandler fileHandler = new FileHandler(logFilePath, false); 
     SimpleFormatter logFormatter = new SimpleFormatter() { 
      @Override 
      public String format(LogRecord record) { 
      String stacktrace = ""; 
      Throwable t = record.getThrown(); 
      if(t!=null){ 
       StringWriter sw = new StringWriter(); 
       t.printStackTrace(new PrintWriter(sw)); 
       stacktrace = sw.toString(); 
      }    
      return record.getLevel() + ": " + record.getMessage() + "\r\n" 
        + stacktrace; 
     } 
     }; 
     fileHandler.setFormatter(logFormatter); 
     logger.addHandler(fileHandler); 

     return logger; 
    } 
Các vấn đề liên quan