2010-05-24 14 views
12

शीर्षक का तात्पर्य है कि मैं प्रत्येक दिन सी # में एक नई लॉग फ़ाइल कैसे बना सकता हूं? अब कार्यक्रम जरूरी नहीं है कि पूरे दिन और रात चलें लेकिन केवल व्यवसाय के घंटों के दौरान ही आ जाए। तो मुझे दो चीजें करने की ज़रूरत है।प्रत्येक दिन एक नई लॉग फ़ाइल बनाना

  1. मैं प्रत्येक दिन एक नई लॉग फ़ाइल कैसे बना सकता हूं? लॉग फ़ाइल में नाम प्रारूप में नाम होगा जैसे MMDDYYYY.txt
  2. रात के सभी घंटों में चलने पर मध्यरात्रि के बाद मैं इसे कैसे बना सकता हूं?
+0

कृपया http://stackoverflow.com/a/8255588/900284 पर एक नज़र यह भी बहुत अच्छा है ले लो। –

+3

यदि आपने एक स्वीकृत उत्तर चुना है तो मैं इसे ऊपर उठाऊंगा। – Joel

उत्तर

3

आप सरलतम मामले में एक विशेष समय पर उसे बनाने के लिए अगर वहाँ आज की तारीख के साथ एक लॉगफ़ाइल है तुम सिर्फ जांच कर सकते हैं के रूप में यह नाम है जब आप अनुप्रयोग के लिए और अगर लॉगिंग सेवा शुरू की जरूरत नहीं है वहाँ आप इसे जोड़ने शुरू करने से पहले एक बना सकते हैं।

एकमात्र मामला आपको विशेष रूप से इस सेटअप के बारे में पता होना चाहिए जब एप्लिकेशन मध्यरात्रि में चलता है।

3

log4net का उपयोग करें। यह लॉगिंग के लिए सबसे अधिक इस्तेमाल की जाने वाली लाइब्रेरी में से एक है।

इसे आसानी से कॉन्फ़िगर किया जा सकता है, कृपया नमूने देखें।

+0

विशेष रूप से: रोलिंगफाइलएपेंडर - <रोलिंग स्टाइल मान = "दिनांक" />,

1

जब आप कुछ लॉग करते हैं, तो यह देखने के लिए जांचें कि वर्तमान दिनांक वाली कोई फ़ाइल मौजूद है, अगर नहीं - तो इसे बनाएं। सरल रूप में है कि :)

if(fileExists(todaysDate + ".txt")){ 
    appendToLogFile(message); 
}else{ 
    createFile(todaysDate + ".txt"); 
    appendToLogFile(message); 
} 
0

इसके बनाने के लिए जब तक आप इसे, उपयोग की जरूरत है कोई जरूरत नहीं है: (। या शायद एक अलग एन्कोडिंग)

file = new StreamWriter(path, true, new UTF8Encoding(false)); 

इस फ़ाइल में पैदा करेगा यदि ऐसा नहीं होता है मौजूद है, या इसमें शामिल होना शुरू करें।

फिर यह फ़ाइल नाम बनाने और बस इसका उपयोग करने का विषय है।

6

मैं कुछ इस तरह की सलाह देते हैं:

string logFile = DateTime.Now.ToString("yyyyMMdd") + ".txt"; 
if (!System.IO.File.Exists(logFile)) 
{ 
    System.IO.File.Create(logFile); 
} 
//append to logFile here... 

वहाँ एक कारण है कि आप आधी रात के बाद उसे बनाने के लिए कुछ चाहते है? जब आप त्रुटि लॉग इन करने के लिए जाते हैं तो यह क्यों नहीं बनाते हैं?

यह भी ध्यान दिया कि मैंने दिनांक प्रारूप बदल दिया है। यह आपको नाम से फ़ाइलों को सॉर्ट करने और क्रम में प्राप्त करने की अनुमति देगा। किसी भी तरह से तारीखों के साथ गड़बड़ करते समय मैं हमेशा इस प्रारूप का उपयोग करता हूं।

37

This example दिखाता है कि रोलिंगफाइलएपेंडर को दिनांक अवधि पर रोल फ़ाइलों को रोल करने के लिए कैसे कॉन्फ़िगर करें। यह उदाहरण हर मिनट लॉग फ़ाइल रोल करेगा! रोलिंग अवधि बदलने के लिए DatePattern मान समायोजित करें। उदाहरण के लिए, "yyyyMmdd" का एक दिनांक पैटर्न हर दिन रोल करेगा।
उपलब्ध पैटर्न की सूची के लिए System.Globalization.DateTimeFormatInfo देखें।

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\temp\rolling.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Date" /> 
    <datePattern value="yyyyMMdd-HHmm" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender> 
+3

+1 लॉग 4Net – Pretzel

+0

का उल्लेख करने के लिए +1 क्या आप रोलिंग शैली के लिए आकार और दिनांक का उपयोग कर सकते हैं? – eaglei22

+1

हां आप रोलिंगस्टाइल समग्र के साथ आकार और दिनांक का उपयोग कर सकते हैं। यहां देखें: http://logging.apache.org/log4net/release/config-examples.html#rollingfileappender रोलिंग फ़ाइल एपेंडर शीर्षक –

5

एनएलओजी (nlog-project.org) आज़माएं। यह मेरी राय में Log4Net की तुलना में काम करने के लिए बहुत लचीला और आसान है।

उदाहरण एनएलओजी।config:

<?xml version="1.0" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

    <targets> 
     <target name="file" xsi:type="File" 
      layout="${longdate} ${logger} ${message}" 
      fileName="${basedir}/${shortdate}/${windows-identity:domain=false}.${level}.log" /> 
    </targets> 

    <rules> 
     <logger name="*" minlevel="Debug" writeTo="file" /> 
    </rules> 
</nlog> 

अधिक उदाहरण (फ़ाइल के अलावा अन्य लॉगिंग लक्ष्य सहित) NLog configuration examples on Github

+3

के तहत 3 बॉक्स नीचे आपने प्रश्न का उत्तर नहीं दिया। एनएलओजी में ऐसा करने का उदाहरण ...? –

+0

@notfed ने एक उदाहरण कॉन्फ़िगरेशन फ़ाइल जोड़ा। – kwcto

8

दूसरों log4net का उल्लेख किया है देखते हैं, तो मैं आगे जाना है और दलाल करेंगे Enterprise Library लॉगिंग ब्लॉक है, जो भी की काफी सक्षम है के लिए जो भी आप चाहते हैं

क्या आप कृपया कुछ कोड शामिल कर सकते हैं जो दिखाता है कि यह रोल हर दिन कितना आसान होगा? क्या लॉग 4 नेट उदाहरण से यह आसान है? - डैनियल डायसन

निश्चित रूप से। आमतौर पर, कॉन्फ़िगरेशन बनाने के लिए Enterprise Library Configuration Tool का उपयोग करेगा; यह टूल थोड़ा सा उपयोग करने में आता है, लेकिन एक बार जब आप समझते हैं कि यह कैसे काम करता है, तो यह बहुत शक्तिशाली है। उस ने कहा, आप हाथ से app.config भी संपादित कर सकते हैं।

यहां बताया गया टूल का आउटपुट यहां दिया गया है, जो हर चीज को रोलिंग फ्लैट फ़ाइल में बहुत अधिक डंप करता है जो हर दिन रोल करता है (या यदि यह 2 एमबी से अधिक हो)। स्वरूपण उपकरण द्वारा प्रदान किया गया डिफ़ॉल्ट है।

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> 
    </configSections> 
    <loggingConfiguration name="" tracingEnabled="true" defaultCategory="Category"> 
     <listeners> 
      <add name="Rolling Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
       listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
       formatter="Text Formatter" rollInterval="Day" rollSizeKB="2000" /> 
     </listeners> 
     <formatters> 
      <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
       template="Timestamp: {timestamp}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Title:{title}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}" 
       name="Text Formatter" /> 
     </formatters> 
     <categorySources> 
      <add switchValue="All" name="Category"> 
       <listeners> 
        <add name="Rolling Flat File Trace Listener" /> 
       </listeners> 
      </add> 
     </categorySources> 
     <specialSources> 
      <allEvents switchValue="All" name="All Events"> 
       <listeners> 
        <add name="Rolling Flat File Trace Listener" /> 
       </listeners> 
      </allEvents> 
      <notProcessed switchValue="All" name="Unprocessed Category"> 
       <listeners> 
        <add name="Rolling Flat File Trace Listener" /> 
       </listeners> 
      </notProcessed> 
      <errors switchValue="All" name="Logging Errors &amp; Warnings"> 
       <listeners> 
        <add name="Rolling Flat File Trace Listener" /> 
       </listeners> 
      </errors> 
     </specialSources> 
    </loggingConfiguration> 
</configuration> 
+0

क्या आप कृपया कुछ कोड शामिल कर सकते हैं जो दिखाता है कि यह रोल हर दिन कितना आसान होगा? क्या लॉग 4 नेट उदाहरण से यह आसान है? –

+1

@ डैनियल डायसन: किया गया। – Randolpho

+0

+1 धन्यवाद। यह दिलचस्प है –

3

नीचे एपेंडर एक्सएमएल है जो मैं वर्तमान में उपयोग कर रहा हूं।

एक बार एक दिन के लिए एक लॉग फ़ाइल और,
2) txt का विस्तार करने के लिए,
आप एक एक्सएमएल क्या नीचे है के लिए इसी तरह का प्रयोग करना चाहिए बनाने
1 की अपनी आवश्यकताओं) के आधार पर।
नीचे दिया गया एक्सएमएल सिस्टम-20121106.txt नामक लॉग फ़ाइल तैयार करेगा।

एकमात्र मुद्दा यह है कि चूंकि फ़ाइल मान लॉग/सिस्टम है- आपकी फ़ाइल वर्तमान दिन के लिए लिखते समय सिस्टम होगी-। इसे पाने के लिए, आपको लॉग/system.txt पर अपना फ़ाइल मान सेट करना होगा, लेकिन फिर आपको अंतिम फ़ाइल के रूप में system.txt.20121106.txt मिल जाएगा।

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="logs/system-" /> 
    <appendToFile value="true"/> 
    <countDirection value="-1"/> 
    <rollingStyle value="Date" /> 
    <datePattern value="yyyyMMdd'.txt'" /> 
    <maxSizeRollBackups value="0" /> 
    <maximumFileSize value="10000KB" /> 
    <staticLogFileName value="false" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%d [%t] %-5p %c - %m%n" /> 
    </layout> 
</appender> 
संबंधित मुद्दे