2012-02-24 10 views
5

मैंने सभी संदेशों को देखा लेकिन उस प्रश्न के लिए स्पष्ट उत्तर नहीं मिला।सीएक्सएफ इनबाउंड और आउटबाउंड संदेश अलग लॉग फ़ाइल में लॉगिंग

मैं सीएक्सएफ इनबाउंड और आउटबाउंड आरामदायक संदेशों को लॉग इन करने के लिए लॉगिंग कैसे कॉन्फ़िगर कर सकता हूं?

मेरे पास निम्न सेटअप है।

org.apache.cxf.common.logging.Log4jLogger 
  • applicationContext.xml साथ

    • फ़ाइल org.apache.cxf.Logger निम्नलिखित (यह मूर्खतापूर्ण लगता है, लेकिन यह इंटरसेप्टर मैं संदेशों उत्पादन हो सकता है के लिए केवल जगह है)

      है
      <bean id="abstractLoggingInterceptor" abstract="true"> 
      <property name="prettyLogging" value="true"/> 
      </bean> 
      <bean id="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" 
      parent="abstractLoggingInterceptor"/> 
      <bean id="loggingOutInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor" 
      parent="abstractLoggingInterceptor"/> 
      
      <cxf:bus> 
      <cxf:inInterceptors> 
      <ref bean="loggingInInterceptor"/> 
      </cxf:inInterceptors> 
      <cxf:outInterceptors> 
      <ref bean="loggingOutInterceptor"/> 
      </cxf:outInterceptors> 
      <cxf:outFaultInterceptors> 
      <ref bean="loggingOutInterceptor"/> 
      </cxf:outFaultInterceptors> 
      <cxf:inFaultInterceptors> 
      <ref bean="loggingInInterceptor"/> 
      </cxf:inFaultInterceptors> 
      </cxf:bus> 
      

    मैं slf4j साथ और log4j के साथ इन निर्देशों का पालन करने की कोशिश की है, लेकिन केवल उत्पादन मैं फ़ाइल में जाओ एप्लिकेशन लॉग संदेश है। मैं अपने कंसोल पर इनबाउंड और आउटबाउंड संदेश देख सकता हूं।

    क्या मुझे लॉगबैक.एक्सएमएल काम के लिए कुछ मिल सकता है, इसलिए मैं ऐप लॉग और संदेश लॉग अलग करता हूं। उदाहरण: http://www.wolfe.id.au/2011/05/20/apache-cxf-logging/

    धन्यवाद।

    संपादित करें 1: मैं अपने classpath से org.apache.cxf.common.logging.Log4jLogger हटाया, और रखा मेरे log4j.xml के लिए निम्न। यह फ़ाइल पर लॉग इन करता है और कंसोल करने के लिए जब लॉगिंग का स्तर INFO के बराबर होता है।

    <appender name="RSLOGFILE" class="org.apache.log4j.RollingFileAppender"> 
    <param name="file" value="${project.basedir}/logs/cxf_inout_messages.log"/> 
    <param name="MaxFileSize" value="100KB"/> 
    <!-- Keep one backup file --> 
    <param name="MaxBackupIndex" value="1"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
    <!-- Print the date in ISO 8601 format --> 
    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/> 
    </layout> 
    </appender> 
    <logger name="org.apache.cxf"> 
    <level value="ERROR"/> 
    <appender-ref ref="RSLOGFILE"/> 
    </logger> 
    
  • उत्तर

    9

    आप CXF 2.2.8 या उच्चतर का उपयोग कर रहे मानते हुए, आपको निम्न कार्य करने की आवश्यकता होगी:

    चरण 1) निम्नलिखित युक्त classpath पर एक फ़ाइल META-INF/cxf/org.apache.cxf.Logger बनाएँ:

    org.apache.cxf.common.logging.Slf4jLogger 
    

    यदि आप मेवेन का उपयोग कर रहे हैं, तो यह नई फ़ाइल src/main/resources/META-INF/cxf में होनी चाहिए, src/main/webapp से नीचे नहीं!

    चरण 2) आप सभी संदेश लॉग इन करने के लिए, एक CXF LoggingFeature बनाने चाहते हैं, true को prettyLogging गुण सेट और CXF बस में जोड़ें।

    चरण 3) log4j और slf4j-log4j12 के लिए आवश्यक जार फ़ाइलों को जोड़ें।

    <dependency> 
         <groupId>org.slf4j</groupId> 
         <artifactId>slf4j-log4j12</artifactId> 
         <version>${slf4j.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>log4j</groupId> 
         <artifactId>log4j</artifactId> 
         <version>${log4j.version}</version> 
        </dependency> 
    

    चरण 4) में आप log4j.xml, जानकारी के लिए org.apache.cxf.services का लॉग स्तर सेट FALSE को additivity सेट और एक समर्पित appender देते हैं:

    <!-- level INFO needed to log SOAP messages --> 
    <logger name="org.apache.cxf.services" additivity="false"> 
        <level value="INFO" /> 
        <!-- specify a dedicated appender for the SOAP messages --> 
        <appender-ref ref="WS_LOG_FILE" /> 
    </logger> 
    
    आप Maven का उपयोग कर रहे हैं, तो निम्न निर्भरता शामिल

    मैंने एक blog post which explains how to configure CXF for log4j in more detail बनाया है।

    +2

    सबकुछ ठीक है, बस थोड़ा सा नोट: उदाहरण के लिए "मेटा-आईएनएफ/सीएक्सएफ/org.apache.cxf.Logger" को याद रखना याद रखें उदाहरण के लिए "src/main/webapp" के बजाय src/main/resource जैसा मैंने किया। इस तरह यह कक्षा के तहत होगा। –

    संबंधित मुद्दे