2009-10-28 4 views
24

Stiamo utilizzando Nlog come framework di registrazione e non riesco a trovare un modo per archiviare i file nel modo desiderato. Mi piacerebbe avere la data di quando il log ha avuto luogo nel nome del file di registrazione.
Tutti i dati di registrazione che si sono verificati da 2009-10-01 00:00 -> 2009-10-01:23:59 devono essere inseriti in Log.2009-10-01.log. Ma tutti i log per questo giorno devono essere inseriti in Log.log per tailing e così via.Come rendere Nlog archiviare un file con la data in cui è avvenuta la registrazione

L'attuale NLog.config che utilizzo è simile a questo.

<?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" > 
    <extensions> 
    <add assembly="My.Awesome.LoggingExentions"/> 
    </extensions> 
    <targets> 
     <target name="file1" xsi:type="File" 
       fileName="${basedir}/Logs/Log.log" 
       layout="${longdate} ${level:uppercase=true:padding=5} ${session} ${storeid} ${msisdn} - ${logger:shortName=true} - ${message} ${exception:format=tostring}" 
       archiveEvery="Day" 
       archiveFileName="${basedir}/Logs/Log${shortdate}-{#}.log" 
       archiveNumbering="Sequence" 
       maxArchiveFiles="99999" 
       keepFileOpen="true" 
      /> 
    </targets> 
    <rules> 
     <logger name="*" minlevel="Trace" writeTo="file1" /> 
    </rules> 
</nlog> 

Questo tuttavia imposta la data nel file di registro alla data in cui viene creato il nuovo file di registro. Quale causa di frustrazione quando vuoi leggere i log più tardi.

Sembra anche che debba avere almeno uno # in archiveFileName, che preferisco non. Quindi se avessi una soluzione per questo sarei anche due volte più grato =)

+1

Mi dispiace tornare a un thread molto vecchio ... ma hai mai trovato una soluzione a questo? –

+0

@AndrewJones Nope. Sono passato allo stack elastico/logstash e kibana. –

risposta

8

Solo nel caso se qualcuno ha ancora bisogno di una soluzione - funzione richiesta è stata aggiunta di recente NLog: https://github.com/NLog/NLog/pull/241, ma non è ancora disponibile per Nuget

37

Probabilmente è troppo tardi per aiutarti, ma credo che tutto ciò che devi fare è includere la data nel nome del file usando il date layout renderer con il nome corretto date format. Includendo la data, non è necessario specificare le funzionalità di archiviazione. Quando la data cambia, verrà creato automaticamente un nuovo file.

<?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" > 
    <extensions> 
    <add assembly="My.Awesome.LoggingExentions"/> 
    </extensions> 
    <targets> 
     <target name="file1" xsi:type="File" 
        fileName="${basedir}/Logs/${date:format=yyyy-MM-dd}.log" 
        layout="${longdate} ${level:uppercase=true:padding=5} ${session} ${storeid} ${msisdn} - ${logger:shortName=true} - ${message} ${exception:format=tostring}" 
        keepFileOpen="true" 
       /> 
    </targets> 
    <rules> 
     <logger name="*" minlevel="Trace" writeTo="file1" /> 
    </rules> 
</nlog> 
+0

Non troppo tardi :) Ho dimenticato di dire che voglio ancora che il log attivo sia denominato Log.log per tailing e così via. Quindi questa soluzione è buona, ma non perfetta :) –

+0

Inoltre, questa soluzione disabilita la possibilità di auto-cancellare i vecchi file di registro dell'archivio ... – Verthosa

0

forse questo è quello che ti serve, quotidiano cartella con il file Log.log in esso

<target xsi:type="File" name="file1" fileName="${basedir}/logs/Log.log" 
     layout="${longdate} ${uppercase:${level}} ${message}" /> 
</targets>