2013-02-15 90 views
11

के लिए लॉगिंग कॉन्फ़िगर नहीं कर सकता है यह अन्य question के समान है, हालांकि मैंने पहले से ही logging.properties निष्पादन योग्य जार में रखा है और काम नहीं करता है।निष्पादन योग्य जार

Logger logger = Logger.getLogger(ReportGenerator.class.getName()); 
logger.log(Level.INFO, "LOG THIS"); 

मैं Netbeans उपयोग कर रहा हूँ तो मैं पथ src/main/resources में logging.properties फ़ाइल डाल:

मुझे लगता है कि है निम्नलिखित एक वर्ग (ReportGenerator) है। यह (अन्य बातों के अलावा) इस है:

# default file output is in user's home directory. 
java.util.logging.FileHandler.pattern = /my/folder/reports.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 10 
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 

# Limit the message that are printed on the console to INFO and above. 
java.util.logging.ConsoleHandler.level = OFF 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 


############################################################ 
# Facility specific properties. 
# Provides extra control for each logger. 
############################################################ 

# For example, set the com.xyz.foo logger to only log SEVERE 
# messages: 
com.mypackage.ReportGenerator.level = ALL 

जार Maven का उपयोग कर उत्पन्न होता है, जब decompressed मैं देख सकता हूँ कि logging.properties जार के मुख्य फ़ोल्डर में है। फ़ोल्डर com के साथ जहां मेरी कक्षा है।

-com 
    -mypackage 
     -ReportGenerator 
logging.properties 
...other things 

जब मैं कंसोल से चलाएँ:

java - jar MyReportsJar.jar 

यह मुझे सांत्वना के माध्यम से लॉग को दर्शाता है। मैं इसे logging.properties.

में सेट की गई फ़ाइल में लॉग करना चाहता हूं, मैं गलत क्या कर रहा हूं? मैं JVM java.util.logging.config.file परम सेट किए बिना इसे कैसे कर सकता हूं?

उत्तर

12

इस के खिलाफ कुछ दिनों के काम कर रहा है और इंटरनेट पर कई संसाधनों को पढ़ने के बाद मैं इस समाधान के साथ आया था:

मैं इस कार्यक्रम में LogManager की लॉगिंग गुण बदलना होगा। मैं उपयोग कर सकते हैं logging.properties फ़ाइल इस तरह .jar में पैक:

LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties")); 

और फिर मैं भी ऐसा कर सकते से पहले के रूप में लकड़हारा हो और प्रवेश करने के लिए:

Logger logger = Logger.getLogger(ReportGenerator.class.getName()); 
logger.log(Level.INFO, "LOG THIS"); 

लेकिन मुझे लगता है कि आप बहुत उपयोगी पाया अगर मैं इस रूप में जार पर अमल

 String logFile = System.getProperty("java.util.logging.config.file"); 
     if(logFile == null){ 
      LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties")); 
     }     
     Logger logger = Logger.getLogger(ReportGenerator.class.getName()); 
     logger.log(Level.INFO, "LOG THIS"); 

इस तरह,:: तो मेरा अंतिम कोड यह है क्रम पर एक और logging.properties फ़ाइल निर्दिष्ट कर सकते हैं

java -jar MyReportsJar.jar 

यह आंतरिक logging.properties फ़ाइल का उपयोग करता है।

लेकिन अगर मैं निष्पादित करें:

java -Djava.util.logging.config.file=<external-logging.properties> -jar MyReportsJar.jar 

यह बाह्य logging.properties फ़ाइल का उपयोग करता है।