2012-08-30 11 views
5

मैं बहुत log4j करने के लिए नया हूँ। मैं अपने लॉग फ़ाइल में अपवाद स्टैक ट्रेस को दिखाने के लिए इस तरह के रूपConvert e.printStackTrace() log4j का उपयोग करने के बजाय

java.lang.IllegalArgumentException: nodeRef is a mandatory parameter 
at org.alfresco.util.ParameterCheck.mandatory(ParameterCheck.java:42) 

ये अपवाद सीधे लिखा जाता है सांत्वना देने नहीं करना चाहती है कि

try { 
    // something 
} catch(Exception e) { 
    StringWriter stack = new StringWriter(); 
    e.printStackTrace(new PrintWriter(stack)); 
    logger.debug("Caught exception; decorating with appropriate status template : " + stack.toString()); 
} 

तरह e.printStackTrace() का उपयोग करके मैं अब हूँ एक खुला स्रोत अनुरूपण प्रोजेक्ट, मेरे द्वारा अपने सभी कार्यक्रमों को नहीं लिख रहा है। तो यह जावा फ़ाइलों के सभी में e.printStackTrace(); दूर करने के लिए असंभव है।

जहाँ तक मुझे पता है, लॉग इन log4j द्वारा मुद्रित किया गया है लॉग के साथ लॉग 4j त्रुटि स्तर जैसे जानकारी, डीबग, चेतावनी का उपयोग करके कॉन्फ़िगर किया जा सकता है। लेकिन सीधे कंसोल या फ़ाइल को लिखने के बारे में कैसे?

मैं log4j कैसे कॉन्फ़िगर एकमात्र अपवाद स्टैकट्रेस मुद्रित करने के लिए नहीं कर सकते हैं लेकिन अन्य जानकारी दिखाने? क्या इसे हल करने का कोई तरीका है?

+1

आपको पहले ** log4j का उपयोग करना होगा। कैच स्टेटमेंट जो आप दिखाते हैं) log4j का उपयोग नहीं करता है; बी) कहीं भी कुछ भी प्रिंट नहीं करता है। यह केवल स्टैकट्रिस के साथ एक स्ट्रिंगवाइटर भरता है। –

+0

मैंने अपना कोड बदल दिया। मेरे नमूना दोनों e.printStackTrace() और logger.debug का उपयोग करता है()। यह मेरे द्वारा लिखा नहीं है। मेरी परियोजना उस जार फ़ाइल का उपयोग करती है जिसका संलग्न स्रोत इस तरह दिखाया गया है। – swemon

+1

मैं सिस्टम.एर को प्रतिस्थापित करने के लिए प्रिंटस्ट्रीम बनाने के लिए क्या करूंगा जो लॉग 4j पर जो कुछ भी प्राप्त करता है उसे लिखता है। इस तरह आप System.out या System.err का उपयोग किसी भी तरह से कर सकते हैं और यह वास्तव में log4j का उपयोग करता है। ;) –

उत्तर

8

कोड

StringWriter stack = new StringWriter(); 
e.printStackTrace(new PrintWriter(stack)); 
logger.debug("Caught exception; decorating with appropriate status template : " + stack.toString()); 

सिर्फ log4j एपीआई के मैदान गलत उपयोग का एक उदाहरण है। लेकिन, अगर आप इसके साथ फंस रहे हैं, वहाँ कुछ भी नहीं सिवाय debug ऊपर लॉग स्तर को बढ़ाने और पूरा संदेश बाहर छोड़ तुम क्या करने के लिए किया जाएगा।

वहाँ संभवतःtruncate सब लॉग संदेश, जो कुछ हद तक अपनी समस्या को कम होगा के लिए एक रास्ता हो सकता है।

+0

हाँ। क्योंकि हम पहले से ही logger.debug() का उपयोग करते हैं। मुझे लगता है कि हमें e.printStackTrace (नया प्रिंटवाइटर (ढेर) का उपयोग करने की आवश्यकता नहीं है; लेकिन स्रोत पहले से ही इस तरह इस्तेमाल किया। – swemon

+1

मुझे नहीं लगता कि आपको लगता है कि कोड खुदाई करते। यहां कुछ भी अनावश्यक नहीं है; आपके उदाहरण में 'printStackTrace' वास्तव में ** प्रिंट ** कुछ भी नहीं है। प्रोग्रामर सिर्फ एक 'डीबग' लॉग संदेश में जोड़ा गया एक स्टैकट्रैक चाहता था, जहां Log4J 'log.debug (msg, exc) '--- और अच्छे कारण के लिए समर्थन नहीं करता है। –

4

उपयोग लॉगर # त्रुटि

import org.apache.log4j.Logger; 

... 

Logger log = Logger.getLogger(Locomotive.class); 
log.error("your message", exc); 

... 
0
logger.info("Inside add() of Abc class"); 
logger.error("Error occurred while calculation::::"+errorMessage); 
संबंधित मुद्दे