سؤال

وأنا في حيرة قليلا حول كيفية التعامل مع خطأ في Struts2. أود أن مرة واحدة الصفحة المركزية حيث سيتم توجيه المستخدمين في حالة حدوث خطأ. وعلاوة على ذلك، عند حدوث خطأ أتمنى لتسجيل الدخول، ما دام أنا باستخدام log4j سأكون تسجيل أنها log.error(e.getMessage(), e);

ولكن، في صفي عمل إذا أنا قبض على خطأ (وضعت كل ما عندي من التعليمات البرمجية في محاولة / صيد) ثم صفحة الخطأ المركزية / المشتركة لا تأتي. لذلك قررت ضد اصطياد الخطأ، وإذا كنت لا قبض على خطأ ثم صفحة الخطأ المركزي تأتي. ولكن الآن كيف أضع رسالة الخطأ / stacktrack في سجلات ؟؟

وبعد قراءة هذا صلة فعلت ما يلي:

   <global-results>
                   <result name="Exception" type="chain">
                      <param name="actionName">ErrorPage</param>
                     <param name="namespace">/error</param>

                   </result>
            </global-results>

            <global-exception-mappings>
                <exception-mapping exception="java.lang.Exception" result="Exception"/>
            </global-exception-mappings>
            <action name="selectionPage" class="reports.ReportSelection">
                <result>/reports/SelectionPage.jsp</result>
            </action>

    </package>
    <package name="secure"  namespace="/error">
        <action name="ErrorPage" class="com.myErrorClass">
            <result>errorpage.jsp</result>
        </action>
    </package>

ووفقا للالتكوين أعلاه، أصلا يتم طرح الخطأ في reports.ReportSelection (ولكن أنا لا اصطياد عليه هناك) حتى النهاية لسيطرة تأتي إلى com.myErrorClass. I CAN تسجيل الأخطاء في هذه الفئة ولكن سؤالي هو، ما إذا كانت الرسالة سجل يزال متاحا ... منذ ألقيت أصلا في reports.ReportSelection؟

هل كانت مفيدة؟

المحلول

وبعد التقاط وتسجيل ذلك، هل retrhowing ذلك؟ إذا قمت بذلك، ثم إدارة استثناء الإطار ينبغي أن ركلة في الخطأ معالجة التعليمات البرمجية الخاصة بك ينبغي أن ننظر بشيء من مثل:.

catch (Exception e) {
    log.error(e.getMessage(), e);
    throw e;
}

ومع أخذ ذلك في مكان يجب أن تكون قادرة على العودة إلى نهج مبسطة الخاص بك من قطع الأشجار وretrhowing في الطبقة العمل، وتكوين صفحة خطأ عالمية واحدة.

نصائح أخرى

وهنا هو كيف تقوم بتسجيل الأخطاء التي رمي أفعالك. أنا لا أعرف لماذا هذه ليست قيد التشغيل بشكل افتراضي. وضع هذا في ملف struts.xml الخاص بك.

    <interceptors>
        <interceptor-stack name="errorloggingStack">
          <interceptor-ref name="defaultStack">
           <param name="exception.logEnabled">true</param>
           <param name="exception.logLevel">ERROR</param>
         </interceptor-ref>
        </interceptor-stack>
    </interceptors>

    <default-interceptor-ref name="errorloggingStack"/>

وأنت لا تحتاج إلى كتل catch حاول حول كل طريقة العمل.

وكبديل، يمكنك أيضا "الكتابة" اعتراضية كومة defaultStack

<interceptors>
    <interceptor-stack name="defaultStack">
        <interceptor-ref name="defaultStack"/>
        <interceptor-ref name="exception">
            <param name="logEnabled">true</param>
            <param name="logLevel">WARN</param>
        </interceptor-ref>
    </interceptor-stack>
</interceptors>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top