मैं अपने प्रोग्राम में लॉग का उपयोग करना चाहता हूं। मैंने java.util.log के बारे में सुना , लेकिन मुझे नहीं पता कि कैसे शुरू किया जाए।
क्या कोई उदाहरण है कि मैं लॉगिंग के साथ क्या कर सकता हूं? मैं अपने कार्यक्रम में लॉगिंग का उपयोग कैसे करूंगा?
मैं अपने प्रोग्राम में लॉग का उपयोग करना चाहता हूं। मैंने java.util.log के बारे में सुना , लेकिन मुझे नहीं पता कि कैसे शुरू किया जाए।
क्या कोई उदाहरण है कि मैं लॉगिंग के साथ क्या कर सकता हूं? मैं अपने कार्यक्रम में लॉगिंग का उपयोग कैसे करूंगा?
जवाबों:
java.util.logging
आप अपने आवेदन के साथ चारों ओर एक और जार फ़ाइल ले जाने के लिए रहता है, और यह एक अच्छा प्रारूप के साथ अच्छी तरह से काम करता है।
सामान्य तौर पर, हर वर्ग के शीर्ष पर , आपके पास होना चाहिए:
private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );
फिर, आप केवल लकड़हारा वर्ग की विभिन्न सुविधाओं का उपयोग कर सकते हैं ।
निष्पादन प्रवाह के शीर्ष स्तर पर डिबगिंग वाली Level.FINE
किसी भी चीज़ के लिए उपयोग करें :
LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );
छोरों का उपयोग करें Level.FINER
/ Level.FINEST
अंदर और उन जगहों पर जहां आपको मूल प्रवाह मुद्दों को डीबग करते समय हमेशा उस विवरण को देखने की आवश्यकता नहीं हो सकती है:
LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );
लॉगिंग सुविधाओं के पैरामीटरित संस्करणों का उपयोग करें ताकि टन के स्ट्रिंग कंक्रीटिंग कचरे को उत्पन्न किया जा सके, जिसे GC को साथ रखना होगा। Object[]
जैसा कि ऊपर सस्ता है, आमतौर पर स्टैक आवंटन पर।
अपवाद हैंडलिंग के साथ, हमेशा पूर्ण अपवाद विवरण लॉग करें:
try {
...something that can throw an ignorable exception
} catch( Exception ex ) {
LOGGER.log( Level.SEVERE, ex.toString(), ex );
}
मैं हमेशा ex.toString()
संदेश के रूप में यहां से गुजरता हूं , क्योंकि तब जब मैं लॉग फाइल में " grep -n
" के लिए " Exception
" हूं, तो मैं संदेश भी देख सकता हूं। अन्यथा, यह स्टैक डंप द्वारा उत्पन्न आउटपुट की अगली पंक्ति पर होने वाला है, और आपके पास उस लाइन से मेल खाने के लिए एक अधिक उन्नत RegEx भी होना चाहिए, जो अक्सर आपको देखने के लिए ज़रूरत से ज़्यादा आउटपुट प्राप्त करता है।
.fine()
लॉग करने की विधि का उपयोग करता हूं, लेकिन मैं संदेश प्रदर्शित करने के लिए प्रतीत नहीं कर सकता ...
इस तरह लकड़हारा घोषित करना चाहिए:
private final static Logger LOGGER = Logger.getLogger(MyClass.class.getName());
इसलिए यदि आप अपने वर्ग के नाम का उल्लेख करते हैं तो यह इस प्रकार है।
मैंने यहाँ उदाहरण के साथ जावा लकड़हारा के बारे में एक लेख लिखा था ।
लॉगिंग के लिए कई उदाहरण और विभिन्न प्रकार के भी हैं। Java.util.log पैकेज पर एक नज़र डालें ।
उदाहरण कोड:
import java.util.logging.Logger;
public class Main {
private static Logger LOGGER = Logger.getLogger("InfoLogging");
public static void main(String[] args) {
LOGGER.info("Logging an INFO-level message");
}
}
वर्ग नाम के बिना हार्ड-कोडिंग :
import java.util.logging.Logger;
public class Main {
private static final Logger LOGGER = Logger.getLogger(
Thread.currentThread().getStackTrace()[0].getClassName() );
public static void main(String[] args) {
LOGGER.info("Logging an INFO-level message");
}
}
Main.class.getSimpleName()
? इस तरह से रीफैक्टरिंग टूल इसे सही तरीके से बदलने की जरूरत है और यदि अभी तक, यह आपके दूसरे समाधान के रूप में क्लंकी नहीं है।
SLF4J Apache Commons Logging (ACL) की तुलना में एक बेहतर लॉगिंग मुखौटा है। इसमें अन्य लॉगिंग चौखटे के पुल हैं, जिससे ACL, Log4J या Java Util Logging पर सीधी कॉल की जाती है, SLF4J से होकर गुजरती है, ताकि आप चाहें तो सिर्फ एक लॉग कॉन्फ़िगरेशन फ़ाइल के साथ सभी आउटपुट को एक लॉग फ़ाइल में निर्देशित कर सकते हैं। आपका एप्लिकेशन कई लॉगिंग फ़्रेमवर्क का उपयोग क्यों करेगा? क्योंकि 3-पार्टी लाइब्रेरी आप उपयोग करते हैं, विशेष रूप से पुराने, शायद करते हैं।
SLF4J विभिन्न लॉगिंग कार्यान्वयन का समर्थन करता है। यह सब कुछ मानक-आउट करने के लिए आउटपुट कर सकता है, लॉग 4 जे या लॉगबैक (लॉग 4 जे पर अनुशंसित) का उपयोग कर सकता है।
मेरा सुझाव है कि आप अपाचे के कॉमन्स लॉगिंग उपयोगिता का उपयोग करें। यह अत्यधिक स्केलेबल है और विभिन्न लॉगर्स के लिए अलग लॉग फाइल का समर्थन करता है। यहाँ देखें ।