2010-11-25 11 views
21

डिफ़ॉल्ट रूप से slf4j, jdk (slf4j-jdk14-1.6.1.jar) के साथ उपयोग करते समय, डीबग संदेशों को लॉग नहीं करता है। मैं उन्हें कैसे सक्षम करूं?slf4j jdk के साथ लॉगिंग - डीबग कैसे सक्षम करें?

मुझे आधिकारिक दस्तावेज़ों, वेब या यहां इसे सक्षम करने के तरीके पर जानकारी नहीं मिल रही है।

मुझे% JDK_HOME%/lib में फ़ाइल बनाने और कॉन्फ़िगरेशन फ़ाइल में स्तर को परिभाषित करने पर कुछ जानकारी मिली (विफल रही)। हालांकि, मैं संकलन-/रन-टाइम पर स्तर को परिभाषित करना चाहता हूं ताकि मैं अलग-अलग लॉगिंग स्तरों के साथ अपने आईडीई से अपने ऐप को चला और डीबग कर सकूं।

क्या कोई पर्यावरण परिवर्तनीय सेट नहीं है, या वीएम तर्क?

उत्तर

21

आपको क्यों लगता है कि यह DEBUG संदेशों को लॉग नहीं करता है?

तुम्हारा मतलब है कि आपके log.debug(String) प्रवेश कॉल java.util.logging लॉग फ़ाइलों में न करना पड़े, तो मैं तुम्हें logging.properties विन्यास फाइल कॉन्फ़िगर करने के लिए FINE स्तर पर लॉग संदेशों की अनुमति देनी लगता है।

यदि आप वैश्विक %JRE_HOME%/lib/logging.properties के साथ गड़बड़ नहीं करना चाहते हैं, तो आप कमांड लाइन पर केवल -Djava.util.logging.config.file=logging.properties में पास कर सकते हैं - यह लॉगिंग सिस्टम को वर्तमान निर्देशिका में उस कॉन्फ़िगरेशन फ़ाइल को देखने के लिए मजबूर करेगा।

या java.util.logging को कॉन्फ़िगर करने के लिए कुछ अन्य (प्रोग्रामेटिक) तरीके का उपयोग करें, ट्यूटोरियल के लिए नीचे देखें।

एसएलएफ 4 जे को कॉन्फ़िगर करने के साथ इसका कोई लेना-देना नहीं है; वास्तव में, एसएलएफ 4 जे में कोई कॉन्फ़िगरेशन नहीं है, सब कुछ बस JAR फ़ाइलों को स्वैप करके कॉन्फ़िगर किया गया है।


आपके संदर्भ के लिए:

+0

मैं अपने कंसोल (stdout/stderr) में डीबग संदेश दिखाना चाहता हूं। यहां ग्रहण का उपयोग करना। साथ ही, जैसा कि प्रश्न में बताया गया है, मैं इसे एक स्थिर फ़ाइल के बजाय संकलित या रनटाइम पर सेट करना चाहता हूं जो सभी परियोजनाओं और सभी रन-कॉन्फ़िगरेशन पर लागू होता है। क्या यह संभव है? – Kissaki

+1

क्या आपने कोशिश की-Djava.util.logging.config.file = logging.properties? –

+0

नहीं। क्या यह एक कामकाजी-डीआईआर पथ है? या जेडीके/lib भी साथ? – Kissaki

3

मैं सिर्फ वेब-INF/कक्षाएं फ़ाइल मेरी अनुप्रयोगों में मेरी logging.properties फ़ाइल डाल (या आदेश का उपयोग करें यदि आप युद्ध में तैनात नहीं हैं, तो नीम प्राक्स द्वारा पहचाने जाने वाले लाइन तर्क), और ग्रहण में प्रॉपर्टी फ़ाइल खुली है, इसलिए मैं इसे संकुल लॉग करने के लिए ट्यून कर सकता हूं और जिस स्तर में मुझे रूचि है।

logging.properties फ़ाइल में, आपको यह सुनिश्चित करना होगा कि लॉगर स्तर और हैंडलर स्तर दोनों स्तर पर सेट हो जाएं। उदाहरण के लिए, अगर आप अपने आउटपुट कंसोल में जाना चाहते हैं, तो आप के लिए कम से कम निम्न करना होगा:

#logging.properties file contents 

#Define handlers 
handlers=java.util.logging.ConsoleHandler 

#Set handler log level 
java.util.logging.ConsoleHandler.level=FINE 

#Define your logger level 
com.company.application.package.package.level=FINE 

#Assign your handler to your logger 
com.company.application.package.package.handlers=java.util.logging.ConsoleHandler 

आप slf4j-jdk14-1.6.1.jar उल्लेख किया है। यह java.util.logging को slf4j बाध्यकारी प्रदान करता है। आपको अपने क्लासपाथ में यह होना चाहिए, लेकिन सुनिश्चित करें कि आपके क्लासपाथ में भी slf4j api (slf4j-api-1.7.12.jar) भी है।

मुझे the example logging.properties file in this link विभिन्न प्रकार के लॉगर्स और हैंडलर बनाने के लिए उपयोगी लगता है, जिससे आप कंसोल पर कौन से लॉग पर जाते हैं, और फाइल पर कौन से लॉग जाते हैं:

और here's the slf4j manual

+0

इसके लिए प्लस वन! मुझे एहसास नहीं हुआ कि मुझे हैंडलर और लॉगर दोनों के लिए स्तर निर्धारित करना था। – Pubudu

7

If you are using slf4j SimpleLogger implementation read this

वहां आप देख सकते हैं कि simpleLoggerINFO का उपयोग डिफ़ॉल्ट लॉग स्तर के रूप में करें। आप सिस्टम प्रॉपर्टी का उपयोग करके इसे बदल सकते हैं। यह गैर-उत्पादन evironments के लिए उपयोगी है:

static { 

    System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "trace"); 
} 

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

  • कोई संबंधित समस्या नहीं^_^