2012-03-29 9 views
5

माध्यम से जा रहा मैं कुछ logback कार्यक्षमता (कस्टम Appenders और की तरह) tweak कोशिश कर रहा हूँ बिना Logback का उपयोग कैसे करें। इसका परीक्षण करने के लिए मैं लॉगबैक को कॉन्फ़िगर करना चाहता हूं और sl4j के माध्यम से सीधे बिना लॉगिंग विधियों को कॉल करना चाहता हूं।सीधे SLF4J

इस अजीब आवश्यकता के लिए कारण, ऐसा माहौल भी अन्य SLF4J पुलों उपलब्ध हैं में कार्यक्षमता logback परीक्षण करने के लिए सक्षम होने के लिए है।

उत्तर

3

इसे करने की कोशिश नहीं की है, लेकिन सही लग रहा है, शायद यह मदद मिलेगी SLF4J के लिए एक संदर्भ के बिना http://logback.qos.ch/manual/configuration.html#joranDirectly:

तो मैं सामान यहाँ वर्णित क्या करना चाहते हैं

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
ch.qos.logback.classic.Logger log = lc.getLogger(foo.Bar.class); 

ch.qos.logback.classic.Logger लागू करता org.slf4j.Logger लेकिन आप इसे सीधे इस्तेमाल कर सकते हैं। आपको LoggerContext अलग-अलग प्राप्त करने की आवश्यकता हो सकती है।

+1

लॉगरफ़ैक्टरी slf4j का हिस्सा है और क्लासैटिकॉगर बाइंडर का उपयोग करता है जो विभिन्न पुल कार्यान्वयन के साथ आता है, इसलिए मैं अभी भी इसके साथ slf4j के बाध्यकारी तंत्र का उपयोग कर रहा हूं। –

+0

@JensSchauder: क्या बस 'नई LoggerContext()' बनाने और SLF4J एपीआई पूरी तरह से बचने के बारे में? –

+1

मैं एक एपीआई, जहाँ मैं बिल्कुल SLF4j उपयोग नहीं कर सकते विकासशील कर रहा हूँ, यह स्टैंडअलोन logback उपयोग करना संभव है? – Akhilesh

1

दुर्भाग्य से, मुझे यह संभव नहीं लगता है। यदि आप Logback Logger source (या अन्य कक्षाओं) पर एक नज़र डालें तो आप देखेंगे कि यह slf4j पर निर्भर करता है।

यह न अच्छा है, imho, के रूप में logback slf4j से अनजान होना चाहिए।

2

पता लगाने के लिए एक तरीका है।

यहाँ उदाहरण है कि कैसे आप LOGBack

// Here we create context 
LoggerContext loggerContext = new LoggerContext(); 
// Initializer is used to enrich context with details 
ContextInitializer contextInitializer = new ContextInitializer(loggerContext); 
try { 
    // Get a configuration file from classpath 
    URL configurationUrl = Thread.currentThread().getContextClassLoader().getResource("custom-logback-configuration.xml"); 
    if (configurationUrl == null) { 
     throw new IllegalStateException("Unable to find custom logback configuration file"); 
    } 
    // Ask context initializer to load configuration into context 
    contextInitializer.configureByResource(configurationUrl); 
    // Here we get logger from context 
    logger = loggerContext.getLogger(LogReporter.class); 
} catch (JoranException e) { 
    throw new RuntimeException("Unable to configure logger", e); 
} 

सामान्य में कॉन्फ़िगर कर सकते हैं अगर आप जानना चाहते हैं कि किसी भी SLF4J बैकएंड काम करता है चाहते हैं, तो आप उस बैकएंड से org.slf4j.impl.StaticLoggerBinder वर्ग स्रोत को देखने के लिए कर सकते हैं ।

+0

यह एक समान संदर्भ में मेरे लिए पूरी तरह से काम करता था जहां मुझे एसएलएफ 4 जे बाध्यकारी पर भरोसा किए बिना स्पष्ट रूप से लॉगबैक 'पर्यावरण' (संदर्भ) स्थापित करने की आवश्यकता थी (चूंकि एसएलएफ 4 जे पहले ही लॉग 4j से जुड़ा हुआ था और मुझे क्लासपाथ तक पहुंच नहीं थी विभिन्न एसएलएफ 4 जे पुलों या इसी तरह का उपयोग करके इसे बदलने में सक्षम हो)। –

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