अब मैं xml कॉन्फ़िगरेशन में log4j2 का उपयोग कर रहा हूं। तब मैंने पाया कि जो कुछ भी उपयोग कर रहा है

<RollingFile name="DailyLog" fileName="${baseDir}/${date:yyyyMM}/${date:dd}/daily.log"
                 filePattern="${baseDir}/${date:yyyyMM}/${date:dd}/daily.%d{yyyy-MM-dd}.%i.log">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss}{UTC} %level: %msg %n"/>
        <Policies>
            <OnStartupTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="10 MB"/>
            <TimeBasedTriggeringPolicy interval="1" modulate="false"/>
        </Policies>
    </RollingFile>

प्रत्येक TriggeringPolicy केवल फ़ाइल का नाम बदलेगा (लेकिन फ़ोल्डर नहीं) यदि मैं हर दिन प्रोग्राम को पुनरारंभ करता हूं तो दैनिक फ़ोल्डर बन जाएगा। चूंकि log4j नहीं जान सकता कि तारीख बदल जाती है।

1
Kingsley Kwan 15 अप्रैल 2020, 05:02

2 जवाब

फ़ाइल नाम विशेषता का मूल्यांकन केवल एक बार किया जाता है जब कॉन्फ़िगरेशन बनाया जाता है। प्रत्येक रोलओवर पर filePattern विशेषता का मूल्यांकन किया जाता है। आपके द्वारा उपयोग किए जा रहे दिनांक लुकअप जैसे लुकअप का कई बार मूल्यांकन किया जा सकता है। पहला मूल्यांकन तब होता है जब कॉन्फ़िगरेशन का मूल्यांकन किया जाता है, इसलिए कॉन्फ़िगरेशन बनाते समय आपके सभी ${date} लुकअप का मूल्यांकन किया जा रहा है। हालांकि, यदि किसी लुकअप को $${date} के रूप में कोडित किया जाता है, तो पहले मूल्यांकन में केवल अग्रणी '$' को हटा दिया जाएगा। फिर जब प्रत्येक रोलओवर पर पैटर्न का मूल्यांकन किया जाता है तो दिनांक लुकअप वर्तमान तिथि जो भी हो, का समाधान करेगा।

यदि आप वर्तमान फ़ाइल को वर्तमान दिनांक के साथ निर्देशिका में लॉग करना चाहते हैं तो आपका सबसे अच्छा विकल्प DirectWriteRolloverStrategy. यह केवल फ़ाइलनाम विशेषता को हटाकर प्राप्त किया जा सकता है, इस स्थिति में लॉग वर्तमान फ़ाइल पैटर्न से मेल खाने वाली फ़ाइल में लिखे जाएंगे। आपके मामले में, ऐसा दिखेगा

<RollingFile name="DailyLog"
                 filePattern="${baseDir}/$${date:yyyyMM}/$${date:dd}/daily.%d{yyyy-MM-dd}.%i.log">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss}{UTC} %level: %msg %n"/>
        <Policies>
            <OnStartupTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="10 MB"/>
            <TimeBasedTriggeringPolicy interval="1" modulate="false"/>
        </Policies>
    </RollingFile>
1
rgoers 15 अप्रैल 2020, 05:19
और मैं अगले दिन फ़ोल्डर बनाने की कोशिश करता हूं, और लॉग सही फ़ोल्डर में लिख सकता है। मुझे लगता है कि समस्या यह है कि यह समय आधार ट्रिगर द्वारा फ़ोल्डर नहीं बना सकता है।
 – 
Kingsley Kwan
23 अप्रैल 2020, 11:48
लेकिन अगर मैं मैन्युअल रूप से फ़ोल्डर नहीं बनाता, तो log4j2 त्रुटि का संकेत देगा और लॉग किसी भी लॉग फ़ाइल में नहीं लिखा गया था।
 – 
Kingsley Kwan
24 अप्रैल 2020, 04:07

मैं लॉगबैक का उपयोग करता हूं।

<fileNamePattern>${LOG_PATH}/info.log.%d{yyyy-MM-dd}
-3
Shikuan Xu 15 अप्रैल 2020, 05:18
ओपी Log4j 2 के लिए एक समाधान चाहता था लॉगबैक नहीं और आपका "समाधान" फाइलों को वर्तमान दिनांक और समय के साथ निर्देशिकाओं में नहीं डालता जैसा कि पूछा गया था।
 – 
rgoers
15 अप्रैल 2020, 05:21