java - software - जावा में पूर्ण स्टैकट्रेस कैसे प्रिंट करें



java download for windows 7 free download (3)

इसे आजमाएं। यह तर्क मुख्य अपवाद और इसके सभी कारणों से गुजरता है, जब तक कि कोई और कारण ( cause == null ) नहीं रह जाता है। इस तरह आप 23 और ... संदेश से बच सकते हैं। मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन मेरा मानना ​​है कि यह आपके लिए काम करना चाहिए।

BTW - logWriter एक बफर लेखक है। आप System.out.print या किसी अन्य लॉगिंग API का उपयोग करना चाह सकते हैं।

public static void debugError(final String message, final Throwable th) {
    final String logMessage = "[ERROR] - " + message;

    try {
        logWriter.write(logMessage);
        logWriter.newLine();

        // dump exception stack if specified
        if (null != th) {
            final StackTraceElement[] traces = th.getStackTrace();
            if (null != traces && traces.length > 0) {
                logWriter.write(th.getClass() + ": " + th.getMessage());
                logWriter.newLine();

                for (final StackTraceElement trace : traces) {
                    logWriter.write("    at " + trace.getClassName() + '.' + trace.getMethodName() + '(' + trace.getFileName() + ':' + trace.getLineNumber() + ')');
                    logWriter.newLine();
                }
            }

            Throwable cause = th.getCause();
            while (null != cause) {
                final StackTraceElement[] causeTraces = cause.getStackTrace();
                if (null != causeTraces && causeTraces.length > 0) {
                    logWriter.write("Caused By:");
                    logWriter.newLine();
                    logWriter.write(cause.getClass() + ": " + cause.getMessage());
                    logWriter.newLine();

                    for (final StackTraceElement causeTrace : causeTraces) {
                        logWriter.write("    at " + causeTrace.getClassName() + '.' + causeTrace.getMethodName() + '(' + causeTrace.getFileName() + ':' + causeTrace.getLineNumber() + ')');
                        logWriter.newLine();
                    }
                }

                // fetch next cause
                cause = cause.getCause();
            }
        }
    } catch (final IOException ex) {
        System.err.println(logMessage);

        if (null != th) {
            th.printStackTrace();
        }
    }
}

https://ffff65535.com

मैं एक अपवाद के पूर्ण स्टैक ट्रेस को पढ़ना चाहता हूं जिसे मैं कैप्चर करता हूं।

उदाहरण के लिए:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.ibm.db2.jcc.DB2Driver'
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1136)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
 at com.azurian.lce.usuarios.ConnectionManager.getConnection(ConnectionManager.java:65)
 at com.azurian.lce.usuarios.db2.UsuarioDAOImpl.autenticar(UsuarioDAOImpl.java:101)
 at com.azurian.lce.usuarios.UsuarioServiceImpl.autenticar(UsuarioServiceImpl.java:31)
 at com.azurian.lce.web.admin.actions.LoginAction.execute(LoginAction.java:49)
 at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
 at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
 at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
 at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: COM.ibm.db2.jcc.DB2Driver
 at java.net.URLClassLoader$1.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClassInternal(Unknown Source)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Unknown Source)
 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1130)
 ... 23 more

मैं "... 23 और" पढ़ना चाहता हूं यह देखने के लिए कि अपवाद कहां से आता है।


जब बाहरी अपवाद (SQLNestedException) आंतरिक अपवाद (ClassNotFoundError) को लपेटता है, तो वे एक ही थ्रेड पर होते हैं, और इसलिए उनके स्टैक ट्रेस का एक सामान्य आधार साझा करते हैं।

(23 अधिक ...) से पता चलता है कि आंतरिक अपवाद के लिए वह सामान्य स्टैक कहां से शुरू होता है, जो कि बाहरी अपवाद को फेंक दिया गया था। इसलिए, जब भी आप देखें (XX अधिक ...), तो बाकी स्टैक ट्रेस को देखने के लिए ऊपर दिए गए अपवाद को देखें।

यदि आप सामान्य रूप से दीर्घवृत्त के बिना स्टैकट्रेस को प्रोग्रामेटिक रूप से प्रिंट करना चाहते हैं, तो आप Throwable.getStackTrace() उपयोग कर सकते हैं और सभी तत्वों को स्वयं प्रिंट कर सकते हैं।


सही है। यहां देखें: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Throwable.html#printStackTrace()

विशेष रूप से:

वर्ण "..." वाली पंक्तियों की उपस्थिति पर ध्यान दें। इन पंक्तियों से संकेत मिलता है कि इस अपवाद के लिए स्टैक ट्रेस का शेष उस अपवाद के स्टैक ट्रेस के नीचे से फ़्रेम की इंगित संख्या से मेल खाता है जो इस अपवाद के कारण हुआ था ("एनक्लोजिंग" अपवाद)। यह आशुलिपि आम मामले में आउटपुट की लंबाई को काफी कम कर सकती है जहां एक लिपटे अपवाद को उसी विधि से फेंक दिया जाता है, जैसा कि "करणीय अपवाद" पकड़ा जाता है।

आपके उदाहरण में इसका क्या अर्थ है:

BasicDataSource.java लाइन 1136 ने ClassNotFoundException को 1130 लाइन पर फेंक दिया और इसे SQLNestedException रूप में फिर से SQLNestedException । इसलिए ClassNotFoundException लिए स्टैकट्रेस का शेष ऊपर ClassNotFoundException मेल खाता है और स्टैकट्रेस इस अधिक संक्षिप्त प्रारूप में मुद्रित होता है।





java