2010-02-04 11 views
5

के लिए लॉग 4j लॉगर अनजान स्ट्रैट्स 2 अपवादों को फंसाने के लिए मैं अपने log4j.xml में कौन सा लॉगर सूचीबद्ध करता हूं?स्ट्रैट्स 2 अपवाद इंटरसेप्टर

मैं निम्नलिखित कोड मेरे struts.xml में घोषणा की है:

<package name="default" extends="struts-default"> 
    <interceptor-stack name="defaultStack"> 
     <interceptor-ref name="timer"/> 
    <interceptor-ref name="logger"/> 
     <interceptor-ref name="exception"> 
      <param name="logEnabled">true</param> 
      <param name="logCategory">error.unhandled</param> 
      <param name="logLevel">WARN</param> 
     </interceptor-ref> 
    </interceptor-stack> 
</package> 

मेरी log4j.xml फ़ाइल में, मैं निम्नलिखित लकड़हारा घोषणा की है:

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%p [%c] - %C{1}.%M(%L) | %m%n"/> 
    </layout> 
</appender> 
<logger name="error.unhandled"> 
    <level value="DEBUG"/> 
    <appender-ref ref="CONSOLE" /> 
</logger> 

हालांकि, जब Struts एक फेंकता अपवाद, यह log4j द्वारा ठीक से लॉग नहीं है। मुझे पता है कि मेरा log4j.xml सही ढंग से पार्स किया जा रहा है क्योंकि मैं मैन्युअल रूप से जावा त्रुटि को "error.unhandled" नामक लॉगर के साथ बना सकता हूं और सीधे इसे ERROR स्तर संदेश लिख सकता हूं। एक सहयोगी ने यह भी सुझाव दिया कि मुझे log4j.logger.error.unhandled लॉगर को फँसाने का प्रयास करना चाहिए, लेकिन यह भी काम नहीं करता है।

अपवाद इंटरसेप्टर के लिए स्ट्रूट 2 का कौन सा लॉगर उपयोग करता है?

+0

क्या आप मैन्युअल रूप से WARN स्तर पर कुछ लॉग इन कर सकते हैं और इसे लॉग में दिखा सकते हैं? – skaffman

+0

आप किस प्रकार का कंटेनर तैनात कर रहे हैं? (यानी टोमकैट, जेबॉस, वेबस्फेयर) –

उत्तर

0

आप अपनी इंटरसेप्टर परिभाषा में लॉग स्तर WARN का उपयोग कर रहे हैं। इसे ERROR में बदलें और आप लॉग संदेश देखेंगे, या वैकल्पिक रूप से log4j.xml फ़ाइल में WARN, INFO या DEBUG पर लॉगर स्तर को कम कर देंगे।

दूसरे शब्दों में, इंटरसेप्टर बाहर संदेश में स्तर चेतावनी दी सांत्वना appender कि संदेश प्राप्त करता है भेजता है, लेकिन चुनता है उसका प्रिंट ले नहीं है क्योंकि यह त्रुटि स्तर पर केवल संदेशों मुद्रित करने के लिए कॉन्फ़िगर किया गया है।

+0

मैंने त्रुटि स्तर को DEBUG तक नीचे तक कम कर दिया, लेकिन इससे मदद नहीं मिली। कोई अन्य विचार? – David

+0

स्ट्रैट्स कॉमन्स लॉगिंग का उपयोग करता है, इसलिए शायद आपकी समस्या कहीं और स्थित है। क्या कॉमन्स-लॉगिंग और log4j दोनों ठीक से कॉन्फ़िगर किए गए हैं? – Yoni

+0

मैं कॉमन्स-लॉगिंग को कहां कॉन्फ़िगर करूँगा? मैंने केवल log4j.xml – David

0

log4.xml में आपका लॉगर इसकी दहलीज ERROR पर सेट है, इसलिए उस स्तर से नीचे लॉग इन कुछ भी दर्ज नहीं किया जाएगा। आपकी स्ट्रैट्स कॉन्फ़िगरेशन WARN स्तर पर लॉग ऑन करने के लिए सेट है, जो ERROR से नीचे है।

आपको कुछ भी प्राप्त करने के लिए log4j.xmllogger से WARN में थ्रेसहोल्ड को कम करना चाहिए।

+0

मैंने त्रुटि स्तर को DEBUG तक नीचे तक कम कर दिया, लेकिन इससे मदद नहीं मिली। कोई अन्य विचार? – David

4

आप जो करना चाहते हैं वह डिफ़ॉल्ट इंटरसेप्टर स्टैक में अपवाद इंटरसेप्टर के लिए पैरामीटर प्रदान करना है। उदाहरण में प्रश्न में पोस्ट किया गया है कि आप डिफ़ॉल्ट ढेर को फिर से परिभाषित कर रहे हैं।

समाधान आधिकारिक विकि से लिया जाता है: https://cwiki.apache.org/WW/exception-handling.html

अपवाद Struts 2 ढांचे द्वारा संभाले जाने की लॉगिंग सक्षम करने के लिए आप struts.xml में कुछ पैरामीटर मान निर्दिष्ट करना होगा।

<interceptors> 
    <interceptor-stack name="appDefaultStack"> 
    <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="appDefaultStack" /> 
संबंधित मुद्दे