2010-06-01 6 views
19

को दबाने के लिए कैसे करें java.util.logging में डिफ़ॉल्ट लॉगर का उपयोग करते समय मैं डेट लाइन durinng लॉगिंग के आउटपुट को दबाने की कोशिश कर रहा हूं।java.util.logging: दिनांक रेखा

 
Jun 1, 2010 10:18:12 AM gamma.utility.application info 

INFO: ping: db-time=2010-06-01 10:18:12.0, local-time=20100601t101812, duration=180000
Jun 1, 2010 10:21:12 AM gamma.utility.application info
INFO: ping: db-time=2010-06-01 10:21:12.0, local-time=20100601t102112, duration=180000

मैं Jun 1, 2010... लाइनों से छुटकारा पाने के लिए करना चाहते हैं, वे सिर्फ मेरी लॉग उत्पादन को अस्त-व्यस्त: उदाहरण के लिए, यहाँ एक ठेठ उत्पादन होता है। मैं यह कैसे कर सकता हूँ?

+0

आउटपुट प्रारूप प्रयुक्त होने वाले फॉर्मेटर पर निर्भर करता है। http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Formatter.html। क्या आप अपना निर्दिष्ट कर सकते हैं और इसकी कॉन्फ़िगरेशन प्रकाशित कर सकते हैं? – Anton

+0

अपनी .properties फ़ाइलें दें? – Bozho

+0

एंटोन, मैं javak 1.6 में java.util.logging.SimpleFormatter का उपयोग करता हूं। मैंने एक साधारण फॉर्मेटर बनाने और इसके प्रारूप (लॉगरेकॉर्ड) विधि को ओवरराइड करने की कोशिश की लेकिन इससे मदद नहीं मिली। – andrewz

उत्तर

12

समस्या के कारण होता है: आप उसका कैसे उपयोग

import java.io.PrintWriter; 
import java.io.StringWriter; 
import java.util.logging.Formatter; 
import java.util.logging.LogRecord; 

class CustomRecordFormatter extends Formatter { 
    @Override 
    public String format(final LogRecord r) { 
     StringBuilder sb = new StringBuilder(); 
     sb.append(formatMessage(r)).append(System.getProperty("line.separator")); 
     if (null != r.getThrown()) { 
      sb.append("Throwable occurred: "); //$NON-NLS-1$ 
      Throwable t = r.getThrown(); 
      PrintWriter pw = null; 
      try { 
       StringWriter sw = new StringWriter(); 
       pw = new PrintWriter(sw); 
       t.printStackTrace(pw); 
       sb.append(sw.toString()); 
      } finally { 
       if (pw != null) { 
        try { 
         pw.close(); 
        } catch (Exception e) { 
         // ignore 
        } 
       } 
      } 
     } 
     return sb.toString(); 
    } 
} 

यह वह जगह है: उदाहरण के लिए, निम्नलिखित फ़ॉर्मेटर केवल लॉग (एक अपवाद लॉग हो रहा है, तो और फेंकने योग्य स्टैकट्रेस) संदेश से पता चलता अभिभावक लॉग में एक हैंडलर। समाधान सभी हैंडलर को मूल लॉग से निकालना है, और फिर अपना कस्टम हैंडलर जोड़ें। इस कोड को माता-पिता लॉग से संचालकों निकालता है: java.util.logging.SimpleFormatter.format:

 
     for(Handler iHandler:log.getParent().getHandlers()) 
     { 
     log.getParent().removeHandler(iHandler); 
     } 
+6

बदले में 'log.setUseParentHandlers (झूठी);' –

5

java.util.logging.Formatter कक्षा विस्तारित एक कस्टम फ़ॉर्मेटर लिखें और अपनी आवश्यकताओं के अनुसार String format(LogRecord) विधि लागू करें।

import java.util.logging.ConsoleHandler; 
import java.util.logging.Logger; 

class A { 
    private static final Logger LOGGER = Logger.getLogger(A.class.getName()); 

    static { 
     CustomRecordFormatter formatter = new CustomRecordFormatter(); 
     ConsoleHandler consoleHandler = new ConsoleHandler(); 
     consoleHandler.setFormatter(formatter); 
     LOGGER.addHandler(consoleHandler); 
    } 

    public void doSomething() { 
     LOGGER.info("something happened"); 
    } 
} 
+0

को कार्यान्वित करने के तरीके पर एक [उदाहरण] (http://www.kodejava.org/examples/458.html) है, मैं इसे आज़मा दूंगा, लेकिन जब मैंने पिछली बार ऐसा कुछ करने की कोशिश की तो यह नहीं हुआ काम नहीं करता – andrewz

+0

इसके अलावा एंड्रयू के उत्तर का पालन करने की आवश्यकता है :) –

+0

फॉर्मेटर अंतिम है। –

31

जावा SE 7 से एक नई प्रणाली संपत्ति नहीं है।

वही संपत्ति java.util.logging गुण फ़ाइल (logging.properties) पर भी कॉन्फ़िगर करने योग्य है। आप एक ग्रहण उपयोगकर्ता हैं, और आप कंसोल आउटपुट में डबल लाइन संदेश से नाराज हैं, तो आप JRE logging.properties फ़ाइल को बदल सकता है (JDK_HOME/JRE/lib/logging.properties) इस तरह से:

java.util.logging.SimpleFormatter.format =% 4 $ s:% 5 $ s [% 1 $ टीसी]% n

कुछ उदाहरण प्रारूप यहाँ उपलब्ध है: http://docs.oracle.com/javase/7/docs/api/index.html?java/util/logging/SimpleFormatter.html

+1

भी इस्तेमाल किया जा सकता है जावा 6 के लिए कोई कामकाज है? –

+1

आपने अभी हमारे दिन को बचाया, धन्यवाद साथी। रिकॉर्ड के लिए, यदि आप टोमकैट का उपयोग कर रहे हैं, तो आप इसे /etc/tomcat/logging.properties के अंतर्गत भी बदल सकते हैं, आपको वैश्विक जावा सेटिंग्स को बदलने की आवश्यकता नहीं है। – bviktor

+0

यदि आप प्रोग्रामेटिक रूप से ऐसा करना चाहते हैं, तो यहां जवाब देखें: https://stackoverflow.com/questions/194765/how-do-i-get-java-logging-output-to-appear-on-a-single-line –