2008-11-06 28 views
29

मैं चाहता हूं कि एप्लिकेशन चालू होने तक लॉग ऑन रोल करें, लेकिन मैं चाहता हूं कि जब एप्लिकेशन पुनरारंभ होता है तो लॉग ताज़ा शुरू हो जाए।मैं स्टार्टअप पर लॉग 4j को लॉग कैसे साफ़ करूं?

अपडेट किया गया: erickson's प्रतिक्रिया के आधार पर मेरी appender इस तरह दिखता है:

<param name="Append" value="false" /> 

अब यह स्टार्टअप पर आधार लॉग फ़ाइल ट्रंकेटस:

<appender name="myRFA" class="org.apache.log4j.RollingFileAppender"> 
     <param name="File" value="my-server.log"/> 
     <param name="Append" value="false" /> 
     <param name="MaxFileSize" value="10MB"/> 
     <param name="MaxBackupIndex" value="10"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" 
      value="%d{ISO8601} %p - %t - %c - %m%n"/> 
     </layout> 
    </appender> 

मैं बस निम्न पंक्ति जोड़ा , लेकिन यह अकेले लुढ़का फाइलों को छोड़ देता है।

+7

जो लोग संपत्तियों की XML स्वरूप का उपयोग नहीं करते के लिए दायर: log4j.appender.file.Append = false –

उत्तर

38

यदि आप append पैरामीटर false पर सेट करते हैं, तो एप्लिकेशन लॉग पुनरारंभ होने पर बेस लॉग फ़ाइल "ताज़ा शुरू हो जाएगी"। क्या आपका मतलब है कि आप किसी भी "लुढ़काए" लॉग फ़ाइलों को भी हटाना चाहते हैं?

+0

नहीं, "लुढ़का" फ़ाइलें रह सकते हैं। मैं सिर्फ बेस लॉग फ़ाइल को साफ़ करना चाहता हूं ताकि जब मैं डिबगिंग कर रहा हूं, मुझे हालिया आउटपुट के लिए पुरानी प्रविष्टियों के माध्यम से मछली नहीं लेनी पड़ेगी। – braveterry

+2

ध्यान दें कि रोलिंग (बैक अप) के बजाय वर्तमान लॉग फ़ाइल को संलग्न करें = झूठी * ओवरराइट करें। – Pino

+0

दुर्भाग्यवश, रोलओवर केवल JVM पुनरारंभ होता है, इसलिए यदि आप निरंतर निर्माण का उपयोग करते हैं तो यह काम नहीं करेगा। –

5

मैंने अपने RollingFileAppender (जो log4j में पहुंच प्राप्त करने के लिए अनावश्यक रूप से मुश्किल है) खोजने के लिए कुछ कस्टम कोड लिखा है, जिसके बाद मैं रोल करना चाहता हूं। मैंने एक ही प्रयोग के लिए नीचे अपना कोड अनुकूलित किया है। मैं अपने लॉग को रोल करने के लिए मजबूर करने के लिए एप्लिकेशन स्टार्टअप पर इस तरह के कोड का उपयोग करता हूं (यदि खाली नहीं है) तो मैं हमेशा एक ताजा लॉग में शुरू करता हूं लेकिन किसी भी लॉग को हटाता हूं लेकिन सबसे पुराना नहीं।

यह कोड एक लॉगर लेता है और लॉगर पदानुक्रम को तब तक लूप करता है जब तक कि इसमें एक लॉगर नहीं होता है जिसमें परिशिष्ट संलग्न होते हैं। यदि यह कभी नहीं करता है, तो यह छोड़ देता है। यदि ऐसा होता है, तो यह उस लॉगर से जुड़े सभी परिशिष्टों पर और रोलिंगफाइलएपेंडर प्रत्येक के लिए लूप करता है, यह लॉग को रोल करने के लिए मजबूर करता है।

कुछ इस तरह की लॉग 4j में करना बहुत आसान होना चाहिए, लेकिन मुझे इसे करने का एक आसान तरीका नहीं मिला है।

public void rollLogFile(Logger logger) { 
    while (logger != null && !logger.getAllAppenders().hasMoreElements()) { 
    logger = (Logger)logger.getParent(); 
    } 

    if (logger == null) { 
    return; 
    } 

    for (Enumeration e2 = logger.getAllAppenders(); e2.hasMoreElements();) { 
    final Appender appender = (Appender)e2.nextElement(); 
    if (appender instanceof RollingFileAppender) { 
     final RollingFileAppender rfa = (RollingFileAppender)appender; 
     final File logFile = new File(rfa.getFile()); 
     if (logFile.length() > 0) { 
     rfa.rollOver(); 
     } 
    } 
    } 
} 
संबंधित मुद्दे