2012-02-20 29 views
14

में फ़ाइल में त्रुटि लॉग या अपवाद कैसे लिखें जावा में फ़ाइल में त्रुटि लॉग या अपवाद लिखने का कोई तरीका है। मैं Log4j के माध्यम से चला गया है। मैं इसके बारे में गुमराह किया लेकिन मुझे एक अच्छा समाधान नहीं मिला। मैंने एक साधारण कोड लिखा हैजावा

catch (Exception e) { 
    PrintWriter pw = new PrintWriter(new FileOutputStream("Log"));  
    e.printStackTrace(pw); 
} 

क्या त्रुटियों या अपवाद को लॉग करने का कोई अन्य तरीका है? क्या कोई भी शरीर मुझे लॉग 4j के नमूना उदाहरण प्रदान कर सकता है?

उत्तर

22

पहले log4j Manual पढ़ते हैं, यह आसान है रोलिंग लॉग फ़ाइल को कॉन्फ़िगर करने के लिए। आपको कोई स्पष्ट फ़ाइल ऑपरेशन करने की ज़रूरत नहीं है।

#SET LEVEL of ROOT-LOGGER, you will like to have Debug in local, but in prod you may just want WARN and ABOVE. This setting is done here! 
log4j.rootLogger=debug, stdout, R 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 

# Pattern to output the caller's file name and line number. (basically, format of log) 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 

# THIS IS WHERE YOU WILL HAVE ALL THE LOG WRITTEN 
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=/var/log/applogs/example.log 

# Maximum size of log file, usually we keep 10MB 
log4j.appender.R.MaxFileSize=100KB 
# Keep one backup file, usually we keep 10 
log4j.appender.R.MaxBackupIndex=1 

log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n 

दूसरा, जब भी आप एक अपवाद को पकड़ने, यह मैनुअल पढ़ने लायक इस

public class MyClass{ 

    private static Logger logger = Logger.getLogger(MyClass.class); 

    public ReturnType myMethod(Param p, Param2 p2) { 
    .... 
    .... 
    try { 
     ..  
    } catch(MyException e) { 
     logger.log("Exceptions happen!", e); //this will put all the details in log file configured earlier 
    } 
    .... 
    } 

    .... 
} 

तरह से करते हैं। यहां तक ​​कि Complete log4j Manual

+1

और अनचेक अपवाद प्रकट होने पर मैं क्या करूँ? मैं कैसे सुनिश्चित कर सकता हूं कि लॉगिंग को सब कुछ भेजा जाएगा? – Blauhirn

+0

* सबकुछ * पकड़ने के लिए 'थ्रोबल' का उपयोग करें। हालांकि सलाह नहीं दी जाती है। आप इन पदों को पढ़ना चाह सकते हैं: 1. http://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-exception-explanation 2. http://stackoverflow.com/questions/2274102/difference-between -using-फेंकने योग्य और अपवाद-में-एक-कोशिश-पकड़ – Nishant

+0

@ निशांत लॉग फ़ाइल कहां स्थित होगी ?? क्या यह अपाचे फ़ोल्डर के अंदर है? – KJEjava48

2

का उपयोग log4j आप काफी आसानी से exceptiosn प्रवेश कर सकते हैं:

try { 
    ... 
} catch(Exception e) { 
    log.error("An exception! Oops!", e); 
} 
4
try { 
     System.setErr(new PrintStream(new FileOutputStream(System.getProperty("user.home")+"/error.log"))); 
} catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
} 

अब सभी त्रुटि उत्पादन इस फ़ाइल में लिखा है

+1

तकनीकी रूप से सही होने पर, यह लॉगिंग फ्रेमवर्क (log4j, जुली, कॉमन्स-लॉगिंग इत्यादि) का उपयोग करने से बेहतर कैसे है? – pap

+2

फ्रेमवर्क का उपयोग क्यों करते हैं, जब आप इसे जावा के अपने मेथोड के साथ हल कर सकते हैं? – Thargor

+3

1: नैदानिक ​​संदर्भों के लिए कोई समर्थन (धागा, वर्ग, विधि, आदि) 3: विभिन्न लॉग स्तरों 2 के लिए कोई स्वरूपण समर्थन मैं पर जा सकते हैं उत्पादन के लिए कोई समर्थन करते हैं। आप एक स्क्रूड्राइवर के साथ एक नाखून हथौड़ा कर सकते हैं, लेकिन यदि आपके पास कोई हथौड़ा नहीं है तो आप एक हथौड़ा का उपयोग क्यों नहीं करेंगे? – pap

3

आप अपने log4j बयान करता है, उदा को पैरामीटर के रूप अपवाद जोड़ सकते हैं

catch(Exception e) 
{ 
    logger.error("Unexpected error", e); 
} 

बशर्ते आपके पास एक फ़ाइल एपेंडर ठीक चल रहा हो, तो यह अपवाद के पूर्ण स्टैक ट्रेस को आउटपुट करेगा।

1

Look this tutorial about "File Appender"

official Log4j short introduction और "विन्यास" अनुभाग देखें।

आप "रोलिंगफाइलएपेंडर" या "फ़ाइल एपेंडर" के बारे में भी खोज कर सकते हैं।

आप अपने लॉगर को एक संदेशदाता को अपना संदेश भेजने के लिए कॉन्फ़िगर करते हैं। यह appender कंसोल (stdin) की ओर संदेश को अग्रेषित कर सकते हैं, एक फ़ाइल (FileAppender, RollingFileAppender ...) की ओर ... इस त्रुटि लॉग प्रदर्शन करने के लिए

उपयोग:

try{ 
    throw new Exception("bla bla bla..."); 
} catch(Exception e){ 
    // log without stack trace 
    mLogger.error("Your log message"); 

    // log with stack trace 
    mLogger.error("Your log message", e); 
}