2011-11-07 12 views
20

Şirketim içinde NLog ile çalışıyoruz. Çok sayıda günlük dosyasıyla ilgili sorun yaşıyoruz. Yapmak istediğimiz şey, dosyaları gün içerisinde arşivlemek ve maksimum x dosya miktarını tutmaktır. İnternette bu konuyla ilgili birkaç konu okudum ve çoğunlukla beni NLog.config dosyamın değiştirilmesinde aynı yönde gösteriyorlar. Ancak, dosyaları beklediğim gibi döndürmek istemiyor. Şu anda istenen klasörde hiçbir şey arşivlenmiyor. Ancak tüm dosyalar aşağıdaki formatta 'logs' dizinine kaydedilir;NLog döndürme ve temizleme günlük dosyaları

Log.info.2011-11-07.txt 

Benim uygulamamda 'günlükler' dizinim var. Bu klasörün içinde tüm günlük dosyaları kaydedilir. Ayrıca, tüm eski dosyaları arşivlemek istediğim 'arşivler' adlı bir klasörüm var. Bu dizinin içinde maksimum sayıda günlük dosyasına ulaşıldıktan sonra otomatik olarak temizlenmelidir. Mümkün mü? Benim geçerli NLog.config dosyam aşağıdaki gibi görünüyor;

<?xml version="1.0" encoding="utf-8" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     autoReload="true" 
     throwExceptions="true" 
     internalLogFile="C:\nlog-internal.txt" 
     internalLogLevel="Error"> 

    <extensions> 
    <add assembly="NLog.Extended" /> 
    </extensions> 

    <targets> 
    <!-- will move file to archive once it reaches 1MB. Files are archived by day, with a maximum of three files. ConcurrentWrites is set to false, 
      change to true if multiple processes will be writing to the logfile--> 
    <target name="file" xsi:type="File" fileName="${basedir}/logs/Log.info.${shortdate}.txt" 
      layout="${longdate} ${callsite} ${level}: ${message} ${exception:format=Message,StackTrace} ${stacktrace}" 
      archiveFileName="${basedir}/logs/archives/log.info.${shortdate}.txt" 
      archiveAboveSize="1048576" 
      archiveEvery="Day" 
      archiveNumbering = "Rolling" 
      maxArchiveFiles="7" 
      concurrentWrites="false" 
      /> 
    <target name="file-default" xsi:type="File" fileName="${basedir}/log_default.txt"/> 
    <target name="file-debug" xsi:type="File" fileName="${basedir}/log_debug.txt"/> 
    <target name="file-testclass" xsi:type="File" fileName="${basedir}/log_testclass.txt"/> 
    <target name="mail" xsi:type="Mail" 
      subject="${level} - ${aspnet-request:serverVariabele=PATH_INFO} | ${callsite:includeSourcePath=true}" 
      to="[email protected]" 
      smtpServer="mail.server.com" 
      from="[email protected]"/> 
    <target xsi:type="Database" 
      name="TestDatabaseLogging" 
      connectionString="Data Source=123.123.123.123;Initial Catalog=NLog_Test;User ID=su_Nlog;Password=test123" 
      dbDatabase="NLog_Test"> 
     <commandText> 
     insert into INNO_LOG ([createDate], [Origin], [LogLevel], [Message], [Exception], [StackTrace]) values (@createDate, @origin, @logLevel, @message, @exception, @stackTrace) 
     </commandText> 
     <parameter name="@createDate" layout="${date}"/> 
     <parameter name="@origin" layout="${callsite}"/> 
     <parameter name="@logLevel" layout="${level}"/> 
     <parameter name="@message" layout="${message}"/> 
     <parameter name="@exception" layout="${exception:format=Message,StackTrace}"/> 
     <parameter name="@stackTrace" layout="${stacktrace}"/> 
    </target> 

    </targets> 

    <rules> 
    <logger name="*" minlevel="Fatal" writeTo="mail" /> 
    <logger name="*" minlevel="Error" writeTo="TestDatabaseLogging" /> 
    <logger name="*" minlevel="Debug" writeTo="file-debug" /> 
    <logger name="*" minlevel="Info" writeTo="file" /> 
    <!--Log to specific files for specific classes.--> 
    <logger name="_Default" minlevel="Trace" writeTo="file-default" /> 
    <logger name="TestClass" minlevel="Trace" writeTo="file-testclass" /> 
    </rules> 
</nlog> 

DÜZENLEME: ckellers cevap sonrasında nihai (snipped) çözümü. Bu sorun gibi görünüyor

<target name="file" 
      xsi:type="File" 
      fileName="${basedir}/logs/Log.${level}.current.txt" 
      layout="${longdate} ${callsite} ${level}: ${message} ${exception:format=Message,StackTrace} ${stacktrace}" 
      archiveFileName="${basedir}/logs/archives/log.error.${shortdate}.{#}.txt" 
      archiveAboveSize="5242880" 
      archiveEvery="Day" 
      archiveNumbering = "Rolling" 
      maxArchiveFiles="3" /> 

cevap

15

dosyanızın adı tanımında shortdate olduğunu. Bu soruya benim cevap bakınız: Delete log files after x days

Sen yaptın tarih parçası

fileName="${basedir}/logs/Log.info.txt 
+0

olmadan dosya adını tanımlamak zorunda! Konuyu daha önce Google üzerinden buldum, ancak ismindeki eksikliğin soruna neden olacağını hiç düşünmemiştim. Kısa süre sonra {#} ekledim ve işe yaradı! – Rob

+0

@Rob, {#} 'ile ilgili ipucu için teşekkürler! Bunu bilmiyordum. – ccellar

+0

rica ederim :) – Rob

İlgili konular