2011-04-13 15 views
5

अपने कस्टम अपवाद वर्ग में मैं toString() अधिरोहित किया है:ओवरराइड Logback त्रुटि उत्पादन

@Override 
public String toString() { 
    final String msg = getLocalizedMessage(); 

    // base 
    String str = getClass().getName() + ": [" + code + "]"; 

    // message 
    if (msg != null) 
     str += " " + msg; 

    // extra 
    if (extra != null) { 
     str += '\n' + extra.toString(); 
    } 

    return str; 
} 

हालांकि (हाँ, मुझे पता है मैं वहाँ StringBuilder का उपयोग करना चाहिए हूँ), जब मैं इस तरह के एक अपवाद लॉग इन करें (org.slf4j.Logger.warn(String msg, Throwable err) के माध्यम से) उत्पादन वेनिला अपवादों के लिए है:

webersg.util.service.ServiceError: null 
    at webersg.util.service.ServiceTools.decodeException(ServiceTools.java:39) ~[bin/:na] 
    at tr.silvercar.rummikub.robot.LobbyConnection.sendRequestTo(LobbyConnection.java:143) ~[bin/:na] 
    at tr.silvercar.rummikub.robot.LobbyConnection.sendRequest(LobbyConnection.java:98) ~[bin/:na] 
    at tr.silvercar.rummikub.robot.Robot.<init>(Robot.java:32) ~[bin/:na] 
    at tr.silvercar.rummikub.robot.RobotController.start(RobotController.java:81) ~[bin/:na] 
    at tr.silvercar.rummikub.robot.runners.LocalAltinRobot.main(LocalSilverRobot.java:132) [bin/:na] 

मैं अपने अतिरिक्त डेटा प्रकट करने के लिए मिल सकता है? मेरा लॉग कार्यान्वयन लॉगबैक है।

उत्तर

3

यह एक त्वरित और गंदा तरीका है: logger.warn ("your_message_here \ n {}", err.toString());

एक बेहतर तरीका अपने स्वयं के कस्टम रूपांतरण विनिर्देशक (logback manual देखने लिखने के लिए किया जाएगा ताकि कस्टम त्रुटि हैंडलिंग आपके आवेदन कोड से निकाला गया है, और आप इसे अपने logback.xml में एक कस्टम रूपांतरण शब्द के माध्यम से उपयोग करें कॉन्फ़िगर कर सकते हैं।

<conversionRule conversionWord="myCon" 
       converterClass="com.example.logging.MyExceptionConverter" /> 
012:

package com.example.logging; 

import ch.qos.logback.classic.pattern.ClassicConverter; 
import ch.qos.logback.classic.spi.ILoggingEvent; 
import ch.qos.logback.classic.spi.IThrowableProxy; 
import ch.qos.logback.classic.spi.ThrowableProxy; 

/** 
* Simple exception converter. 
* 
*/ 
public class MyExceptionConverter extends ClassicConverter { 
    /* (non-Javadoc) 
    * @see ch.qos.logback.core.pattern.Converter#convert(java.lang.Object) 
    */ 
    @Override 
    public String convert(ILoggingEvent event) { 
     IThrowableProxy itp = event.getThrowableProxy(); 
     if (itp instanceof ThrowableProxy) { 
      ThrowableProxy tp = (ThrowableProxy)itp; 
      return tp.getThrowable().toString(); 
     } 

     return ""; 
    } 
} 
फिर अपने logback.xml में

तो आप इसे इस संदर्भ के लिए की आवश्यकता होगी:

यहाँ एक सरल उदाहरण है कि क्या करेंगे आप क्या कर रहे हैं के बाद है

और फिर इस तरह एक एनकोडर पैटर्न में% myCon का उपयोग करें:

<encoder> 
    <pattern>%d{dd MMM yyyy HH:mm:ss.SSS} %logger{0}: %myCon %nopex%n</pattern> 
</encoder> 

ध्यान दें कि% जोड़ने nopex सामान्य अपवाद हैंडलिंग

+2

आप (बजाय ClassicConverter से विस्तार की) ThrowableHandlingConverter से विस्तार करना चाहिए बंद हो जाता है। फिर आपको% nopex हैक की भी आवश्यकता नहीं है। और, यदि आप स्टैक ट्रेस मुद्रित करना चाहते हैं, तो% myCon% n के बाद जाना चाहिए। –

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