2014-07-03 9 views
15

मैंने को केवल OnStartupTriggeringPolicy सेट के साथ कॉन्फ़िगर किया है, लेकिन जब मैंने DefaultRolloverStrategy की अधिकतम विशेषता को कुछ नंबर पर सेट किया है, तो लॉग उस राशि को अनिश्चित काल तक उत्पन्न करते रहेंगे।Log4j2 DefaultRolloverStrategy की अधिकतम विशेषता वास्तव में कैसे काम करती है?

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </Console> 
     <RollingRandomAccessFile 
      name="RollingRAF" 
      fileName="logs/app.log" 
      filePattern="logs/app-%d{[email protected]}.log"> 
      <PatternLayout> 
       <Pattern>%d %p %c{1.} %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <OnStartupTriggeringPolicy /> 
      </Policies> 
      <DefaultRolloverStrategy max="5"/> 
     </RollingRandomAccessFile> 
    </Appenders> 
    <Loggers> 
     <Logger name="myLogger" level="warn"> 
      <AppenderRef ref="RollingRAF"/> 
     </Logger> 
     <Root level="error"> 
      <AppenderRef ref="Console"/> 
     </Root> 
    </Loggers> 
</Configuration> 

यह क्योंकि मैं अपने नाम पैटर्न में पुनरावर्तक की जरूरत नहीं है है:

यहाँ मेरी log4j2.xml है?

क्या ऐसा इसलिए है क्योंकि मेरी फ़ाइल का नाम सटीक सेकंड पर सेट है?

क्या ऐसा इसलिए है क्योंकि मेरे पास केवल OnStartupTriggeringPolicy सेट है?

या यहां क्या हो रहा है?

मेरा लक्ष्य यहां एक रोलिंग कॉन्फ़िगरेशन स्थापित करना था जो अंतिम 5 एप्लिकेशन रन लॉग करेगा।

+0

क्या आप नाम पैटर्न में तारीख का उपयोग कर रहे हैं, तो आप ' 'का उपयोग करना चाहिए? – Sionnach733

+2

@ Sionnach733 जोड़ना/बदलना जो ज्यादा नहीं बदलता है, यह अनिश्चित काल तक लॉग उत्पन्न करता रहता है। अगर मैं एक इटरेटर% जोड़ता हूं और सटीकता को उस बिंदु पर कम करता हूं जहां मैं एक ही परिशुद्धता के साथ 5 लॉग उत्पन्न करने में सक्षम हूं, तो यह पुराने लॉग को अपेक्षित रूप से ओवरराइट करता है (उदाहरण के लिए यदि परिशुद्धता मिनटों पर सेट हो और मैं 1 मिनट में 5 लॉग उत्पन्न करता हूं) , लेकिन जैसे ही तिथि बदलती है (अगले मिनट आता है) यह 5 और लॉग उत्पन्न करने की अनुमति देगा। आदर्श रूप से मैं बस सुविधा के लिए फ़ाइल नाम की तारीख चाहता था कार्यक्षमता नहीं, क्योंकि मैं सिर्फ नाम से तारीख को छोड़ सकता हूं और जो चाहता हूं उसे प्राप्त करने के लिए एक सादा इटरेटर के साथ जा सकता हूं। –

+1

मैंने वही व्यवहार देखा है और @ छत-गीको से सहमत हूं, डिफ़ॉल्टरॉलरस्ट्रेटी पर अधिकतम विशेषता केवल अनुवांशिक रूप से लागू होती है और इटेटरेटर केवल तब ही पुनरावृत्त होता है जब शेष फ़ाइल नाम दोहराया जाता है, इसलिए यह मेरे लिए ऑटो प्रतीत नहीं होता है नाम अलग होने पर पुराने लॉग फ़ाइलों को हटा दें। फिर भी, यह वास्तव में अजीब बात है कि यह कार्यक्षमता मौजूद नहीं है जब एपीआई इतने बड़े पैमाने पर इतने बड़े लोगों के लिए उपयोग किया जाता है ... –

उत्तर

12

DefaultRolloverStrategy फ़ाइल टाइम में उल्लिखित दिनांक पैटर्न का उपयोग करेगा यदि टाइमबैड ट्रिगरिंग पॉलिसी निर्दिष्ट है। max विशेषता का उपयोग करने के लिए, फ़ाइल पैटर्न में %i पैटर्न निर्दिष्ट करें, और रोलओवर नीतियों में <SizeBasedTriggeringPolicy size="20 MB" /> जोड़ें। (या पाठ्यक्रम के कुछ अन्य आकार।)

<DefaultRolloverStrategy max="5"/> में अधिकतम के लिए मान तब सुनिश्चित करेगा कि उसी रोलओवर अवधि के भीतर (आपके लिए एक सेकंड के बाद से आपने %d{[email protected]} का दिनांक पैटर्न निर्दिष्ट किया है) 5 से अधिक फाइलें नहीं बनाई जाएंगी जब एक आकार आधारित रोलओवर ट्रिगर किया गया था।

यह अधिक उपयोगी है यदि आपकी रोलओवर विंडो लंबी है, जैसे हर दिन एक नए फ़ोल्डर में रोलिंग की तरह, और उस फ़ोल्डर में, सुनिश्चित करें कि अधिकतम आकार = 20 एमबी के साथ 5 से अधिक फ़ाइलें नहीं बनाई गई हैं।


अद्यतन:

log4j 2.5 custom delete actions कॉन्फिगर करने की क्षमता जोड़ा गया। बॉक्स के बाहर आप आयु, गिनती या कितनी डिस्क स्थान लेते हैं (संचित फ़ाइल आकार) के आधार पर फ़ाइलों को हटा सकते हैं।

+0

क्या रोलओवर रणनीति सादा पाठ के रूप में अनदेखा करने वाले नाम पैटर्न में टाइमस्टैम्प जोड़ने का कोई तरीका है? इस तरह से मैं पैटर्न के अंत में केवल '% i' जोड़ सकता हूं और फिर केवल'% i' को देखेगा और नई फ़ाइल पर रोल करते समय उस तारीख को अनदेखा कर देगा। मैंने दस्तावेज़ों में '$$ {date: [email protected]} जैसे पैटर्न को देखा, लेकिन ऐसा लगता है कि यह '% d' पैटर्न के समान है। –

+0

सुनिश्चित नहीं है कि मैं सही ढंग से समझता हूं, लेकिन हर साल या हर युग की तरह बहुत बड़ी रोलओवर अवधि का उपयोग करने के बारे में क्या '$$ {date: G}'? –

+5

हाँ, मैं समझता हूं कि। मुझे सिर्फ 'लॉग/ऐप-% i.log "पैटर्न के साथ भी जाना नहीं होगा, मैंने सोचा कि शायद एक तरीका है जिसे मैं व्यक्तिगत देखने की सुविधा के लिए टाइमस्टैम्प में निचोड़ सकता हूं। –

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