मैं अपने आप को इस समस्या के पार आया, और यह मुझे काफी समय लगा यह पता लगाने की। मैंने पाया है कि अधिकांश उत्तरों में केवल समाधान का हिस्सा है और यह नहीं बताता कि यह कैसे/क्यों काम करता है ... यदि आपके पास थोड़ा अलग उपयोग केस है तो इसे अनुकूलित करना मुश्किल हो जाता है।
उदाहरण:
<target name="log"
xsi:type="File"
fileName="${basedir}/logs/log.${longdate:cached=true}.log"
layout="${message}"
archiveFileName="${basedir}/logs/archives/log.${shortdate}.{#}.log"
archiveAboveSize="5242880"
archiveEvery="Day"
archiveNumbering = "Rolling"
maxArchiveFiles="20"
/>
स्पष्टीकरण
आप दोनों कैश्ड लेआउट प्रतिपादक और longdate चर का उपयोग करना पड़ता है। यह समझने के लिए कि यह क्यों काम करता है, आपको यह समझने की आवश्यकता है कि वे कैसे काम करते हैं, और वे कैसे बातचीत करते हैं।
longdate:
fileName="${basedir}/logs/log.${longdate}.log"
अपनी लॉग नाम पर longdate चर का उपयोग करना काफी हर निष्पादन पर एक नया लॉग फ़ाइल की गारंटी देगा ... को छोड़कर यह एक नया लॉग फ़ाइल हर मिलीसेकंड भी दौरान बनाता है एक ही निष्पादन जो शायद सबसे दुर्लभ परिस्थितियों को छोड़कर वांछनीय नहीं है।
कैश्ड लेआउट प्रतिपादक:
fileName="${basedir}/logs/log.${shortdate:cached=true}.log"
कैश्ड लेआउट रेंडरर पहले लॉग कॉल पर चर कैश, और फिर हमेशा इसके बाद की प्रविष्टियों के लिए है कि मूल्य का उपयोग करें ... लेकिन कैश केवल जब तक बनी रहती है निष्पादन पूरा हो जाता है। शॉर्टडेट, या किसी भी अन्य चर का उपयोग करना जो प्रत्येक निष्पादन को बदलने की गारंटी नहीं है, काम नहीं करेगा। इसे उसी फ़ाइल नाम के साथ एक लॉग फ़ाइल मिलेगी, जिसका उपयोग करना चाहता है, और यह केवल संलग्न होगा (या अगर आपके पास सेट है तो हटाएं)। यह वही नहीं है जो हम चाहते हैं।
संयुक्त: कि निष्पादन समाप्त जब तक लॉगफ़ाइल (कैश को साफ़ करने
fileName="${basedir}/logs/log.${longdate:cached=true}.log"
यह काम करता है क्योंकि यह निष्पादन प्रति पहले लॉग का मिलीसेकंड टाइमस्टैम्प लेता है, और फिर इसे कैश, और हमेशा का उपयोग करता है)। अगली बार जब आप इसे चलाते हैं (जब तक यह वही मिलीसेकंड नहीं है ... असंभव!) आपको एक नया मान कैश किया जाएगा, और एक नई लॉग फ़ाइल (लेकिन केवल एक!)।
यह एक सहायक उत्तर है! धन्यवाद। – Mikey
मुझे एक और तरीका मिला है - '$ {guid: cached = true} .log' – Kai
@ मिर: यह एक बहुत अच्छा जवाब है। लेकिन जब यह काम नहीं कर रहा है तो मुझे एक मामला मिला है। यदि autoReload (https://github.com/nlog/NLog/wiki/Configuration-file#automatic-reconfiguration) सत्य पर सेट है और आप ऐप बंद किए बिना कॉन्फ़िगरेशन बदल रहे हैं तो यह वर्तमान लॉग बंद कर देगा और एक नया प्रारंभ करेगा। क्या इससे निपटने का कोई तरीका है? – IgorStack