Log4net फ़ाइल नाम में तारीख के साथ दैनिक फ़ाइल नाम रोलिंग


जवाबों:


103

अपनी Log4net config फाइल में, रोलिंग पैरामीटर के साथ निम्नलिखित पैरामीटर का उपयोग करें:

<param name="DatePattern" value="dd.MM.yyyy'.log'" />

28
ऐसा प्रतीत होता है कि इसे एक कॉन्फ़िगर तत्व के रूप में प्रचारित किया गया है: <datePattern value = "dd.MM.yyyy.'log '" /> चीयर्स!
लोंगड़ा

3
@mstaessen <preserveLogFileNameExtension value="true" />सही वाक्यविन्यास है और यह एक शानदार उत्तर है। नुकसान कैसे हुआ, क्या मैं पूछ सकता हूं?
लैरी बी

1
अगर मुझे सही से याद है, तो यह इस तरह से चला गया। स्टार्टअप पर, log4net रोलिंग अनुक्रम में पहला फ़ाइल नाम उत्पन्न करेगा। यह पता लगाएगा कि वह फाइल पहले से मौजूद है और फिर दूसरी फाइल को रोल करने का फैसला करेगी, लेकिन जब वह भी पहले से मौजूद है, तो वह रोल करने का फैसला नहीं करता है, बल्कि इसे क्लीयर करता है और उस दूसरी लॉग फाइल में सब कुछ ओवरराइट कर देता है। जब तक आपको क्लीयर
टाइमफ्रेम के

207
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
  <file value="logs\" />
  <datePattern value="dd.MM.yyyy'.log'" />
  <staticLogFileName value="false" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="5MB" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
</appender>

मुझे लगता है कि आपको @Mun के रूप में समस्या को हल करने के लिए किस पैरामीटर पर मुख्य बिंदु को उजागर करना चाहिए। हालाँकि, मैंने आपके उत्तर के लिए भी मतदान किया।
RDeveloper

1
यह स्थैतिक तत्व था, staticLogFileName तत्व के साथ संयोजन के रूप में (और फ़ाइल तत्व के लिए मूल्य विशेषता पर ध्यान दें) जो मेरे लिए काम करता था
मिश्री

पूरा जवाब!
नागेश

32

एक RollingLogFileAppender के लिए आपको इन तत्वों और मूल्यों की भी आवश्यकता है:

<rollingStyle value="Date" />
<staticLogFileName value="false" />

3
यह काम करता है, लेकिन फ़ाइल एक्सटेंशन के बाद की तारीख को जोड़ देता है। उदाहरण के लिए, मुझे Error.log20111104 जैसी लॉग फ़ाइल मिलती है - क्या किसी को फ़ाइल नाम को थोड़ा बेहतर स्वरूपित करने का तरीका पता है?
LostNomad311

यहाँ फ़ाइल नाम को बेहतर तरीके से प्रारूपित करने का तरीका बताया गया है: stackoverflow.com/questions/615092/…
LostNomad311

staticLogFileName का उपयोग किस लिए किया जाता है? मैं केवल यह चाहता हूं कि दिन समाप्त होने के बाद लॉग फाइल को एक नए नाम में रोल किया जाए। मैं एक लॉग मॉनिटर का उपयोग करना चाहता हूं जो हर बार एक विशिष्ट दिखता है।
सूर्य

22

Log4Net 1.2.13 का उपयोग करते हुए हम फ़ाइल नाम में दिनांक समय की अनुमति देने के लिए निम्न कॉन्फ़िगरेशन सेटिंग्स का उपयोग करते हैं।

<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />

जो निम्नलिखित सम्मेलन में फाइलें प्रदान करेगा: logname-2015-04-17.txt

इसके साथ आमतौर पर यह सुनिश्चित करना सबसे अच्छा है कि आप प्रति दिन 1 लॉग रख रहे हैं।

<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />

यदि फ़ाइल का आकार एक चिंता का विषय है, तो निम्नलिखित 5 एमबी की 500 फाइलों को एक नया दिन बनाने तक की अनुमति देता है। काउंटडायरेक्शन उन फ़ाइलों के आरोही या अवरोही नंबरिंग की अनुमति देता है जो अब चालू नहीं हैं।

 <maxSizeRollBackups value="500" />
 <maximumFileSize value="5MB" />
 <rollingStyle value="Composite" />
 <datePattern value="yyyyMMdd" />
 <CountDirection value="1"/>
 <staticLogFileName value="true" />

18

मैंने प्रयोग करना समाप्त कर दिया ('.log' फ़ाइल नाम और 'myfilename_' के आसपास के एकल उद्धरणों पर ध्यान दें):

  <rollingStyle value="Date" />
  <datePattern value="'myfilename_'yyyy-MM-dd"/>
  <preserveLogFileNameExtension value="true" />
  <staticLogFileName value="false" />
  <file type="log4net.Util.PatternString" value="c:\\Logs\\.log" />

यह मुझे देता है:

myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.

preserveLogFileNameExtensionLog4net के पूर्व संस्करणों के लिए काम नहीं करता है (जैसे v1.2.10) जैसा कि यहाँ
दिमित्री

13

मैंने सभी उत्तरों की कोशिश की है, लेकिन हमेशा कुछ गायब था और मेरे लिए उम्मीद के मुताबिक काम नहीं कर रहा था।

तब मैंने प्रत्येक उत्तर में दिए गए संकेतों के साथ थोड़ा प्रयोग किया और निम्नलिखित सेटिंग के साथ सफल रहा:

<appender name="RollingActivityLog" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="C:\temp\LOG4NET_Sample_Activity.log" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <staticLogFileName value="false" />
  <preserveLogFileNameExtension value="true" />
  <datePattern value="-yyyyMMdd" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %-5level - %message%newline" />
  </layout>
</appender>

मापदंडों के अन्य संयोजनों के साथ मुद्दा यह था कि नवीनतम फ़ाइल में समय पैटर्न नहीं था, या यह कि समय पैटर्न को जोड़ दिया गया था, .log20171215जिससे हर दिन एक नया फ़ाइल समय (और एक नया फ़ाइल प्रकार! ) बना - या दोनों मुद्दे प्रकट हुए।

अब इस सेटिंग से आपको इस तरह की फाइलें मिल रही हैं:

LOG4NET_Sample_Activity-20171215.log

जो मैं चाहता था।


संक्षेप में:

  • डेट पैटर्न को <file value=...विशेषता में न रखें, बस इसे परिभाषित करें datePattern

  • सुनिश्चित करें कि आपके पास preserveLogFileNameExtension मान विशेषता सेट है true

  • सुनिश्चित करें कि आपके पास निर्धारित staticLogFileName मूल्य है false

  • सेट rollingStyleविशेषता मूल्य के लिए Date


आप रोलिंग सॉलिटेल को कंपोजिट में भी सेट कर सकते हैं, जो डेट और साइज दोनों पर रोल करता है।
साइमन टवेसी

1
बहुत अच्छा काम करता है। मैं संक्षेप में भी जोड़ूंगा: सुनिश्चित करें कि आपके पास staticLogFileName मान गलत पर सेट है
Randall Flagg

5

फ़ाइल एक्सटेंशन को संरक्षित करने के लिए:

<log4net>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="D:\\LogFolder\\%date{yyyyMM}\\SchT.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <maximumFileSize value="30MB" />
      <staticLogFileName value="true" />
      <preserveLogFileNameExtension value="true"/>
      <datePattern value="ddMMyyyy" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
  </log4net>

क्यों देखते हैं %date{yyyyMM}और value="ddMMyyyy" ? प्रभावी तारीख पैटर्न कौन सा है?
एलन रुइन

मुझे लगता है कि डेटापर्ट फाइल के नाम के लिए है, लेकिन% तारीख {yyyyMM} पैरेंट डायरेक्टरी के लिए है (मैं इसे इसी तरह चाहता था)
फोर्थ

DatePattern विशेषता डेट रोलिंग के लिए रोलिंग अवधि सेट करती है। RollingFileAppender के तहत लॉगिंग .apache.org/log4net/release/config-examples.html देखें । "उदाहरण के लिए," yyyyMMdd "की एक तारीख पैटर्न हर दिन रोल करेगा। उपलब्ध पैटर्नों की सूची के लिए System.Globalization.DateTimeFormatInfo देखें।"
रयान बुदिकॉम २५'१

@rbuddicom हाँ, लेकिन सवाल यह है कि फ़ाइल एक्सटेंशन को कैसे संरक्षित किया जाए।
चौदह

मुझे पता है, एलन ने 'मूल्य = "ddMMyyyy" के उद्देश्य पर सवाल उठाया। आपकी टिप्पणी "मुझे लगता है कि तारीख फ़ाइल नाम के लिए है" उस संबंध में गलत है।
रेयान बुदिकॉम

0

पिछली प्रतिक्रिया के साथ विस्तारित कॉन्फ़िगरेशन अनुभाग

 ...
 ...
 <rollingStyle value="Composite" />
 ...
 ...

सूचीबद्ध कार्य लेकिन मुझे उपयोग नहीं करना था

<staticLogFileName value="false" /> 

। मुझे लगता है कि रॉलिंगएपेंडर को (तार्किक रूप से) उस सेटिंग को नजरअंदाज करना चाहिए क्योंकि आवेदन के पुनः आरंभ होने / पुन: उपयोग होने पर फ़ाइल को हर दिन फिर से बनाया जाता है। शायद यह तुरंत रोलओवर के लिए मायने रखता है जब भी आवेदन शुरू होता है।


मेरे लिए, यह <staticLogFileName मान = "झूठा" /> के बिना काम नहीं करेगा
nurettin

मेरे साथ-साथ, staticLogFileName को झूठे में सेट करना पड़ा अन्यथा यह लॉग नहीं होता
oonyalo

0

मैंने सिस्टम चर का उपयोग करके सीआई से आसान संशोधन को सक्षम करने के लिए कॉन्फ़िगरेशन को कोड में स्थानांतरित कर दिया। मैंने फ़ाइल नाम के लिए इस कोड का उपयोग किया है और परिणाम 'Log_03-23-2020.log' है

            log4net.Repository.ILoggerRepository repository = LogManager.GetRepository(Assembly.GetEntryAssembly());
            Hierarchy hierarchy = (Hierarchy)repository;
            PatternLayout patternLayout = new PatternLayout();
            patternLayout.ConversionPattern = "%date %level - %message%newline%exception";
            patternLayout.ActivateOptions();

            RollingFileAppender roller = new RollingFileAppender();
            roller.AppendToFile = true;
            roller.File = "Log_";
            roller.DatePattern = "MM-dd-yyyy'.log'";
            roller.Layout = patternLayout;
            roller.MaxFileSize = 1024*1024*10;
            roller.MaxSizeRollBackups = 10;
            roller.StaticLogFileName = false;
            roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
            roller.ActivateOptions();
            hierarchy.Root.AddAppender(roller);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.