2009-12-23 6 views
24

मैं इस बहुत से छुटकारा पाने के लिए चाहते हैं ...क्या अभी तक slf4j के लिए जावा 1.5 varargs API है?

public void info(String msg); 
public void info(String format, Object arg); 
public void info(String format, Object arg1, Object arg2); 
public void info(String format, Object[] argArray); 

... और यह एक साथ बदलें ...

public void info(String format, Object ... args); 

... ताकि मेरे लॉगिंग वाक्य रचना नहीं है उन तर्कों की संख्या के आधार पर बदलना है जिन्हें मैं लॉग करना चाहता हूं। ऐसा लगता है कि बहुत सारी चर्चाएं हैं और इसके आसपास काम करते हैं, लेकिन यह कहां है? या मुझे रैपर को लपेटना चाहिए जो slf4j है?

+3

यदि कोई ओपन-सोर्स प्रोजेक्ट आपके पैच स्वीकार नहीं करता है, और आपको विशेष कार्यक्षमता की आवश्यकता है, तो उत्तर बहुत स्पष्ट प्रतीत होता है, नहीं? – kdgregory

+0

@kdgregory - नहीं, स्पष्ट नहीं है और यह कैसे काम करना चाहिए; यह एक वाणिज्यिक (घातक) मानसिकता है, जहां सॉफ्टवेयर = विक्रेता.ए()। अनुरोध फ़ीचर()। getUpgrade(); अगर असमर्थित अपवाद पकड़ो, तो यह नया विक्रेता() || है self.screwed()। लेकिन openSource = public.download()। उपयोग()। अनुरोध फ़ीचर()। प्रतीक्षा करें (public.get सहमति()); यदि आम सहमति <= लागत (समय या $$ में), यह इसके लायक होना चाहिए। मेरा अधिकांश समय (वाणिज्यिक स्व देव के रूप में) को आम सहमति/सामान्य ज्ञान से प्रेरित खराब अनुमानित संवर्धनों को लागू करने में खर्च किया जाता है, लेकिन डॉलर। प्राप्त()। मुझे यह भी उम्मीद है कि भविष्य में लागत में वृद्धि होगी। – michael

+0

@michael_n - यह सुनिश्चित नहीं है कि आपने मेरी टिप्पणी का अर्थ कैसे लिया, लेकिन स्पष्ट उत्तर "एक कांटा बनाओ।" यह अच्छा है अगर प्रोजेक्ट रखरखाव वही चीज़ें चाहते हैं जो आप करते हैं, लेकिन यह हमेशा नहीं होता है। – kdgregory

उत्तर

4

Logger के लिए SLF4J javadoc पढ़ने से सरल उत्तर नहीं होगा। जो मैंने पढ़ा है उससे वे जेडीके के पुराने संस्करणों के साथ संगत रहना चाहते हैं।

यदि आप वास्तव में SLF4J का उपयोग करने के लिए बंधे नहीं हैं तो शायद log5j एक विकल्प है?

+1

+1 - साफ लगता है! –

+0

नहीं, वे slf4j के पुराने verdions के साथ बाइनरी संगत रहना चाहते हैं। –

14

पर चर्चा को देखने के लिए असली सवाल "क्यों एक JDK < 5 यह द्वारा समर्थित होना चाहिए किसी भी अब" है स्वतंत्र महसूस? यदि आपके पास जावा का पुराना संस्करण है, तो पुराने एपीआई का उपयोग करें। यह इत्ना आसान है। वर्तमान जावा दुनिया में यह बेहतर क्यों नहीं बनाते? मेरा मतलब है, जेडीके 5 को सूर्य/ओरेकल से समर्थन अनुबंध के बिना भी समर्थित नहीं है। पिछली संगतता इस मामले में एक मजाक है।

+1

समर्थन मंच पर निर्भर करता है। आईबीएम 1.4 प्लेटफॉर्म का समर्थन करता है। –

+0

ओह, और आप "क्यों जरूरी है ..." का जवाब देते हैं कि सीडीआई, slf4j उदार तानाशाह, ऐसा होना चाहता है। –

+2

मुझे यह नहीं मिल रहा है ... क्यों जावा 5 के साथ संगत slf4j 2.x नहीं बनाते हैं, और जावा 0.0.1 के साथ संगत slf4j 1.x रखें? – rustyx

5

क्या इस बारे में:

package util; 

public class Util { 
    public static Object[] va(Object... args) { 
    return args; 
    } 
} 

package foo; 
import static util.Util.va; 
... 
logger.info("a {}, b {}, c c {}", va("A", "B", "C")); 
... 

आप भी va() अन्य स्थानों में उपयोग कर सकते हैं।

1

SLF4J के साथ varargs का उपयोग करने का एक समाधान है।

लंबरजैक नामक एक ओपन सोर्स प्रोजेक्ट है जो एसएलएफ 4 जे को वर्गार्ज लॉगिंग विधियों को प्रदान करता है। विस्तार बहुत स्वाभाविक है, आपको SLF4J का उपयोग करने की तुलना में कोई अंतर नहीं लगता है (ऐसा इसलिए है क्योंकि Lumberjack केवल SLF4J के आसपास एक रैपर है, इसलिए सभी कार्यक्षमता अभी भी SLF4J द्वारा प्रदान की जाती है)।

उदाहरण उपयोग:

JackLogger logger = JackLoggerFactory.getLogger(LoggerFactory.getLogger(Weather.class)); 

logger.info("Hello {}! The current time is {}:{}:{}, and after {} hours the weather will be {}.", "Jack", 13, 30, 0, 5, "sunny"); 

लकड़हारा वेबसाइट: https://github.com/bogdanu/lumberjack

लकड़हारा लाइसेंस SLF4J का लाइसेंस, MIT लाइसेंस के रूप में एक ही है, इसलिए कोई अतिरिक्त लाइसेंस प्रतिबंध है।

अस्वीकरण: मैं लकड़हारा के लेखक

0

jcabi-log टूलकिट, जो SLF4J एक Conveninent vararg इंटरफेस के साथ प्रवेश करने का प्रयास करें लपेटता हूँ।

11

यह अंततः हल हो गया है। एसएलएफ 4 जे 1.7.0 अब जेडीके 1.5 की आवश्यकता है और पिछड़े-संगत varargs विधियों है।

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