Domanda

Stavo cercando di aggiungere la data al nome del mio file di registro e sono stato in grado di farlo funzionare seguendo i pochi suggerimenti che ho trovato in StackOverflow. Tutto funziona bene, ma per qualche motivo, il primo file ha sempre la data aggiunta due volte.

Ad esempio, invece di Log.2009-02-23.log, Ottengo Log.2009-02-23.log.2009-02-23.log.

L'ho trovato così strano e fyi, questo è un codice molto semplice. Non è come se avessi funzionante in un ambiente multi-thread.

La mia configurazione log4net:

<log4net>
<appender name="MyLog" type="log4net.Appender.RollingFileAppender">
    <file value="../../Logs/Mylog"/>
    <staticLogFileName value="false" />
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <datePattern value=".yyyy-MM-dd.lo\g" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{DATE} [%t] %-5p %c - %m%n"/>
    </layout>
</appender>
<root>
    <level value="INFO"/>
    <appender-ref ref="MyLog"/>
</root>
</log4net>

Qualche idea perché?

Modifica: voglio aggiungere le informazioni sull'ambiente in cui sto testando questo.
- ASP.NET
- .NET Framework 2.0
- Windows Server 2003 Service Pack a 64 bit 2
- Log4NET 1.2.10

È stato utile?

Soluzione 2

È un problema di autorizzazione. Almeno questo è quello che mi sta succedendo.

Sono nuovo nell'usare log4net, quindi non sapevo che avesse una registrazione interna ma l'ho trovato, quindi ho provato a girare Registrazione interna Su. Non ero molto sicuro di quello che sta dicendo, ma ecco come mi sembra che stia facendo: 1. Aggiungi la data al nome del file. 2. Prova ad accedere al file per scriverlo (non riuscito). 3. Aggiungere la data al nome del file ancora. 4. Accedi correttamente al file (che ora ha il nome del file strano)

Prima di saperlo, ero Google per la soluzione a questo problema con parole chiave come quello che ho come titolo su questa domanda di stackoverflow. Non c'erano molte informazioni là fuori. Ho trovato forse un ragazzo che ha detto che succede ad alcune persone ma non ho mai spiegato perché né la soluzione. Con queste nuove informazioni (+il messaggio di errore interno di Log4NET), stavo esaminando diversi thread dai motori di ricerca. Con ciò ho scoperto che potrebbe essere un problema di autorizzazione.

Sembra che l'applicazione di scrittura non abbia un permesso sufficiente per la cartella dei registri. L'identità predefinita dell'applicazione è di solito network_service. Dopo aver dato più permesso (ho dato il pieno controllo ma non so quale sia il minimo per farlo funzionare) alla cartella, funziona bene.

Se qualcuno può spiegarlo meglio di me, non esitare a modificare.

Altri suggerimenti

Ciò accade se si verifica un problema ad accedere al file di registro quando si inizializza il sistema di registro. Può accadere se si inizializza due volte il sistema di registro, se si esegue il programma mentre un'altra copia è in esecuzione e scrittura nel file di registro o se si sta modificando il file di registro in un editor di testo. Fondamentalmente tutto ciò che provoca un blocco di scrittura sul file di registro quando viene eseguito Log4Net init.

Controlla il tuo codice per le chiamate duplicate a Log4NET INIT - forse stai inizializzando in un costruttore anziché in un costruttore statico di un singleton o Global INIT, ad esempio.

Ciò può accadere anche se si esegue una configurazione "Web Garden" e non include il PID nel nome file, perché ogni diverso processo del server Web cerca di scrivere sullo stesso file. Se si utilizzano i giardini Web e si scrive in file, aggiungi il PID al modello di fileName in modo che ogni processo del server ottenga il proprio file.

Ho riscontrato lo stesso problema. Per me, è stata una combinazione di utilizzo di RollingfileAppender per i miei registri di prova e eseguire i miei test NUUNIT con Resharper.

Si scopre che usa Resharper Due Processi per eseguire i test:

2 TaskRunners

che crea una condizione di gara sul file di registro.

Ora, se cambiamo il nome del file di registro per includere l'ID processo:

<appender name="MyLog" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="MyLog.pid.%processid" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="false"/>
  <datePattern value="_yyyy-MM-dd'.log'"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{HH:mm:ss.fff} [%15.15t] %-5p '%40.40c' - %m%n" />
  </layout>
</appender>

il problema è risolto. Ogni file ottiene il suo nome univoco:

Mylog.pid.5440_2010-10-13.log
Mylog.pid.1496_2010-10-13.log

Notare l'uso di Modello per 'tipo'.

Spero possa aiutare.

Come ha sottolineato Olle. Il tuo problema è correlato a " g", che il tuo log4net sta interpretando come un altro dateformat. Prova a eliminare il ".yyyy-mm-dd.lo g" e sostituirlo con "YYYY-MM-DD"

Il ".log" non appartiene alla dataformat

Uso quanto segue:

<param name="DatePattern" value="yyyy.MM.dd.\l\o\g"/>

Con questo ottengo nomi di file come: 2009.02.23.log

Tentativo <datePattern value=".yyyy-MM-dd.lo\g" /> Non capisco a cosa servisse il g.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top