2013-04-04 31 views
14

Tôi có một tình huống mà tôi muốn in tất cả các ngoại lệ bị bắt trong khối catch bằng cách sử dụng logger.làm thế nào để in một ngoại lệ bằng cách sử dụng logger?

try { 
     File file = new File("C:\\className").mkdir(); 
     fh = new FileHandler("C:\\className\\className.log"); 
     logger.addHandler(fh); 
     logger.setUseParentHandlers(false); 
     SimpleFormatter formatter = new SimpleFormatter(); 
     fh.setFormatter(formatter); 
    } catch (Exception e) { 
     logger.info(e); 
    } 

tôi đã logger lỗi không thể được áp dụng cho java.io.Exception...

mối quan tâm của tôi là nếu tôi làm rất nhiều điều trong khối try và tôi tiếp tục chỉ có một khối catch như catch (Exception e), Sau đó là có bất kỳ cách nào bằng cách sử dụng logger in bất kỳ loại ngoại lệ bị bắt trong khối catch? Lưu ý: chúng tôi đang sử dụng java.util.logging.Logger API

Vui lòng hướng dẫn cho tôi ... Cảm ơn trước

+0

http://stackoverflow.com/a/1149718/112500 – Shashi

+0

Bản sao có thể có của http://stackoverflow.com/questions/1149703/stacktrace-to-string-in-java – Shashi

+0

Nói chung tên, định dạng, v.v. bên ngoài mã để nó có thể được tinh chỉnh trong sản xuất. – Jayan

Trả lời

23

Có lẽ bạn nên làm rõ trình ghi nhật ký nào bạn đang sử dụng.

Giao diện org.apache.commons.logging.Log có phương thức void error(Object message, Throwable t) (và phương pháp void info(Object message, Throwable t)), sẽ ghi lại dấu vết ngăn xếp cùng với thông báo tùy chỉnh của bạn. Triển khai Log4J cũng có phương thức này.

Vì vậy, có lẽ bạn cần phải viết:

logger.error("BOOM!", e); 

Nếu bạn cần phải đăng nhập nó với mức INFO (tuy nhiên, nó có thể là một trường hợp sử dụng lạ), sau đó:

logger.info("Just a stack trace, nothing to worry about", e); 

Hope nó giúp.

+0

@Kadelakig xin lỗi, chúng tôi đang sử dụng API java.util.looging – Pankaj

+4

Tôi hiểu rồi. Dường như cũng có một số chức năng tương tự: 'java.util.logging.Logger.getLogger (" Test ") log (Level.INFO," BOOM! ", E);' <- điều này làm việc cho tôi. –

+0

có điều này sẽ giúp những gì tôi đang tìm kiếm – spandey15

0

Bạn có thể sử dụng phương pháp này để đăng nhập ngoại trừ chồng để String

public String stackTraceToString(Throwable e) { 
    StringBuilder sb = new StringBuilder(); 
    for (StackTraceElement element : e.getStackTrace()) { 
     sb.append(element.toString()); 
     sb.append("\n"); 
    } 
    return sb.toString(); 
} 
0

Hãy thử đăng nhập theo dõi ngăn xếp như sau:

logger.error("Exception :: " , e); 
+0

tôi đã thử điều này, có lỗi Biểu tượng không tìm thấy biểu tượng: lỗi phương thức (java.lang.String, java.io.IOException) vị trí: class java.util.logging.Logger logger.error ("Exception ::", e); – Pankaj

+0

@Pankaj Bạn không sử dụng Log4j để đăng nhập. Phương thức này hiện diện trong 'org.apache.log4j.Logger' –

4

Sử dụng: LOGGER.log(Level.INFO, "Got an exception.", e);
hoặc LOGGER.info("Got an exception. " + e.getMessage());

+1

Nếu ngoại lệ là bất ngờ sau đó tôi khuyên bạn nên sử dụng SEVERE của mức báo cáo cảnh báo cho thông điệp tường trình – SimY4

+0

Có, đối với ngoại lệ không mong muốn có thể là đúng. Tôi đã trả lời các câu hỏi mặc dù, nơi mà người hỏi đã được sử dụng thông tin đăng nhập cấp để đăng nhập và do đó ví dụ của tôi bằng cách sử dụng thông tin. – user3094526

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