2011-11-23 13 views
20

मुझे jdk लॉगिंग कॉन्फ़िगरेशन के बारे में कोई प्रश्न है। मेरे पास एक ईजेबी है (ग्लासफ़िश में तैनात) जो आउटपुट संदेशों में जेडीके लॉगिंग का उपयोग करता है। वजह मैं इस तरह एक कोड के साथ एक नाम दिया लकड़हारा का उपयोग करें:जावा लॉगिंग - लॉगर के लिए कस्टम लॉग फ़ाइल में आउटपुट को रीडायरेक्ट कैसे करें?

private static Logger logger = Logger.getLogger("org.imixs.workflow"); 
..... 
     logger.fine(" some info..."); 
.... 

मुझे पता है कि मैं Glassfish से logging.properties फ़ाइल में निम्न पंक्ति जोड़कर मेरी लकड़हारा के लिए LogLevel कॉन्फ़िगर कर सकते हैं:

..... 
org.imixs.workflow.level=FINE 

लेकिन मैं अपने लॉगर के लिए आउटपुट फ़ाइल कैसे निर्दिष्ट कर सकता हूं? मैं सभी संदेशों को 'org.imixs.workflow' नामक लॉगर से अलग फ़ाइल में रखना चाहता हूं। क्या यह संभव है?

किसी भी मदद

उत्तर

28

FileHandler का थोड़ा भ्रमित पैटर्न संपत्ति इस

handlers=java.util.logging.FileHandler 
# Default global logging level. 
.level=INFO 

#logging level for the foo.bar package 
foo.bar.level=CONFIG 
java.util.logging.FileHandler.pattern=%h/java%u.log 

एक पैटर्न एक स्ट्रिंग है जो निम्न विशेष घटक है कि क्रम से बदल दिया जाएगा शामिल होते हैं के लिए इस्तेमाल किया जा सकता है:

"/" स्थानीय पथ विभाजक

"% t" प्रणाली अस्थायी निर्देशिका

"% ज" "user.home" प्रणाली प्रोप का मूल्य erty

"% जी" घुमाया लॉग

"% u" भेद करने के लिए पीढ़ी नंबर एक अद्वितीय संख्या को हल करने संघर्ष

"%%" एक ही प्रतिशत चिह्न के लिए अनुवाद "%"

आप एक से अधिक फ़ाइलों को लॉग इन करना चाहते हैं तो आप यह कई संचालकों की स्थापना द्वारा कई नामित वालों

#FileHandler for file1  
java.util.logging.FileHandler.pattern = logging_property_test.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 1 
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 

#FileHandler for file2 
logging.FileHandler2.pattern = logging_property_test2.log 
logging.FileHandler2.limit = 50000 
FileHandler.count = 1 
logging.FileHandler2.formatter = java.util.logging.SimpleFormatter 


#setting handler for logger1 
logging.PropertyTestingLogger.handlers=java.util.logging.FileHandler 

#setting handler for logger2 
logging.PropertyTestingLogger2.handlers=logging.FileHandler2 

के लिए क्या कर सकते हैं आप देख सकते हैं चाल है कि वहाँ है एक logging.FileHandler2 कि एक कस्टम वर्ग है और कुछ नहीं करता है लेकिन FileHandler

package logging; 

import java.io.IOException; 
import java.util.logging.FileHandler; 

public class FileHandler2 extends FileHandler { 

    public FileHandler2() throws IOException, SecurityException { 
     super(); 
    } 

} 

पृष्ठभूमि लागू होता है: दुर्भाग्य से जावा के रचनाकारों की अपेक्षा नहीं थी किसी को भी एक से अधिक फ़ाइलों में प्रवेश करने की। आप java.util.logging.FileHandler के स्रोत को देखें, तो आप पाएंगे, उस पैटर्न संपत्ति वर्ग के नाम से भरी हुई है:

public class FileHandler extends StreamHandler { 

    private String pattern; 

    private void configure() { 

     String cname = getClass().getName(); 
     pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log"); 
+0

लेकिन मैं इस पैटर्न का उपयोग यह निर्दिष्ट करने के लिए कैसे कर सकता हूं कि यह केवल मेरे नामित लॉगर (org.imixs.workflow) के लिए प्रभावित होता है? मैं सामान्य सर्वर संदेशों को अपने एप्लिकेशन विशिष्ट लॉग फ़ाइल में रीडायरेक्ट नहीं करना चाहता हूं। – Ralph

+0

मैंने तदनुसार अपनी पोस्ट अपडेट की। उदाहरण में डिफ़ॉल्ट लॉग स्तर जानकारी पर सेट है, लेकिन foo.bar पैकेज –

+0

कॉन्फ़िगर करने के लिए हाँ - लेकिन मेरा प्रश्न है: क्या लॉगजर 'foo.bar' के लिए एक अलग आउटपुट फ़ाइल सेट करना संभव है। मुझे पता है कि आप प्रत्येक पैकेज के लिए एक अलग लॉग स्तर निर्दिष्ट कर सकते हैं। लेकिन अलग लॉग फाइलों को कैसे परिभाषित किया जाए? – Ralph

10

आप एक FileHandler का उपयोग करना चाहिए के लिए धन्यवाद।

FileHandler fileHandler = new FileHandler("myLogFile"); 
logger.addHandler(fileHandler); 

वालों को विन्यस्त कुछ स्पष्ट उदाहरण के लिए Example Depot देखें।

और गुण फ़ाइल से सेटिंग के लिए आपको these answers उपयोगी मिल सकता है।

+3

लेकिन क्या यह कॉन्फ़िगरेशन फ़ाइल के माध्यम से ऐसा करना भी संभव है - ताकि मुझे मेरे स्रोत कोड में लॉगफाइल के लिए हार्ड कोडित फ़ाइल नाम निर्दिष्ट करने की आवश्यकता न हो? – Ralph

3
java.util.logging साथ

, यह नहीं है कॉन्फ़िगरेशन फ़ाइल को संशोधित करके बस संभव है।दुर्भाग्यवश, आपको FileHandler का विस्तार करना होगा और उस हैंडलर को उस फ़िल्टर को कॉन्फ़िगर करना होगा जिसे आप लॉग करना चाहते हैं।

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

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